Android bmp.getWidth() gibt 0 zurück?

Der

Mitglied
Hallo,
ich bekomme beim laden und anpassen eines Bildes eine Fehlermeldung:
07-02 07:27:37.850: E/AndroidRuntime(32682): FATAL EXCEPTION: Thread-14330
07-02 07:27:37.850: E/AndroidRuntime(32682): java.lang.IllegalArgumentException: width and height must be > 0
07-02 07:27:37.850: E/AndroidRuntime(32682): at android.graphics.Bitmap.createBitmap(Bitmap.java:603)
07-02 07:27:37.850: E/AndroidRuntime(32682): at android.graphics.Bitmap.createBitmap(Bitmap.java:551)
07-02 07:27:37.850: E/AndroidRuntime(32682): at com.example.test.Main.passeBildAn(Main.java:186)
07-02 07:27:37.850: E/AndroidRuntime(32682): at com.example.test.Main.teste(Main.java:113)

zu dem Code komme ich wenn ich (im LogCat) auf:
"07-02 07:27:37.850: E/AndroidRuntime(32682): at com.example.test.Main.teste(Main.java:113)" Klicke:
Java:
		Bitmap trBild = passeBildAn(BitmapFactory.decodeResource(getResources(),
                R.drawable.bild, options), weite, hoehe);

Das ist meine Methode:
Java:
	public Bitmap passeBildAn(Bitmap bmp, int weite, int hoehe) {
        // neue Weite handy-groeßen-unabhaengig also weite / 3
        int newWidth = weite;
        // neue Hoehe um gleichen Faktor wie weite verkleinern/vergroeßern
        int newHeight = hoehe;

        // Werte fuer die Skalierung
        float scaleWidth = ((float) newWidth) / bmp.getWidth();

        // Man sieht der aufwand mit der neuen Hoehe war unnoetig, da scaleWidth
        // gleich scaleHeight
        float scaleHeight = ((float) newHeight) / bmp.getHeight();

        // Eine Matrix fuer die Manipulation des Bildes
        Matrix matrix = new Matrix();

        // bitmap skalieren
        matrix.postScale(scaleWidth, scaleHeight);

        // bitmap neu erstellen
        Bitmap resizedBitmap = Bitmap.createBitmap(bmp, 0, 0, (bmp.getWidth()), (bmp.getHeight()),
                matrix, true);
        return resizedBitmap;
	}

Der Fehler taucht in der Zeile auf:
Java:
        Bitmap resizedBitmap = Bitmap.createBitmap(bmp, 0, 0, (bmp.getWidth()), (bmp.getHeight()),
                matrix, true);

Auf diese Zeile bring mich diese hier aus dem LogCat:
"07-02 07:27:37.850: E/AndroidRuntime(32682): at com.example.test.Main.passeBildAn(Main.java:186)"

Das bild ist (bisher) nur ein Rechteck und im Anhang zu finden, es ist im drawable-hdpi Ordner abgelegt und hat 25*100 Pixel.
 

Anhänge

  • bild.png
    bild.png
    237 Bytes · Aufrufe: 35
Wahrscheinlich ist es zu dem Zeitpunkt noch nicht gerendert worden.

Verpacke den Code mal in folgenden Listener:

Java:
<yourView>.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
	@Override
	public void onGlobalLayout() {
		// do something
	}
}

Dein Problem klingt nach einem, was ich auch mal hatte und das ich so gelöst habe. Im Listener wirst du informiert, wenn der View (<yourview>) auf dem Bildschirm dargestellt wurde.
 
Danke für die schnelle Antwort (mal wieder 😀)!

Hat alles super geklappt, kein Fehler mehr!!

Langsam könnte man meinen du wärst der einzige Aktive user hier ;D
 
Möglicherweise... 🙂 Es gibt schon ein paar, aber viele holen sich ihre Infos auf StackOverflow (ich auch oft), aber wenn ich von etwas Ahnung hab - oder es glaube :-D - dann teile ich auch gern mein Wissen.
 

Zurück
Oben