Android BitmapFactory.decodeResource nimmt zu viel Speicher

Ich habe eine Frage zum laden von Bitmap aus den Ressourcen. Mein code:

public void onClick(View view) {
    if (mainButton == view) {
        Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.test);
    }
}

Den test.jpg die Bildauflösung ist 3288 x 4936px. Es ist im jpeg-Format (3,9 MB /48,7 MB, wenn unkomprimiert). Während diese Funktion der Arbeit (auf meinem Nexus 7 2013 Gerät), folgende Ausnahme tritt auf:

java.lang.OutOfMemoryError: Failed to allocate a 259673100 byte allocation with 5222644 free bytes and 184MB until OOM
        at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
        at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
        at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:609)
        at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444)
        at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:467)
        at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:497)
        at pl.jaskol.androidtest.MainActivity.onClick(MainActivity.java:50)
        at android.view.View.performClick(View.java:4756)
        at android.view.View$PerformClick.run(View.java:19749)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5221)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

Warum die Anwendung versucht, zu reservieren, so viel wie 248MB?
Ich schrieb eine ähnliche Anwendung in Qt für Android mit dem gleichen Bild in Ressourcen und es funktioniert OK.

EDIT:

  1. Kann ich nicht die Größe ändern.

  2. Dies ist sehr einfache Anwendung, wie Hallo Welt. Es macht nichts anderes, nur geladen bitmap aus den Ressourcen.

EDIT2:

Jim ' s Lösung funktioniert bei mir. Aber es gibt ein anderes problem. Nach dem laden von Bitmaps ist es 4 mal zu groß (2 mal Höhe und 2 mal Breite). Ich habe versucht, verschiedene Bilder, darunter neue Bild erstellt, in Pinta oder Gimp.

  • Versuchen Sie die Anwendung einige Options auf Sie zu ändern die Größe der Stichprobe bei der Erzeugung der bitmap.
  • versuchen resizing es
  • Gut, dass die Bild - "nur" muss über mindestens 64 MB (die nicht fast jedes Handy sowieso). Sie müssen mit viel mehr Speicher woanders. Bitte fügen Sie den entsprechenden code. Interessanterweise ist die Speicheranforderung gescheitert ist, für genau 4 mal die bitmap.
  • Ich kann nicht die Größe ändern. Ich habe, um es zu ändern und zu speichern.
InformationsquelleAutor jaskmar | 2015-02-27
Schreibe einen Kommentar