Bitmap-out-of-memory-Fehler in android...
Arbeite ich in einem android-Anwendung, und ich bin mit einem bitmap zu binden, ein Bild, um eine Bildansicht. Meine Forderung ist, sich zu drehen, die Bildansicht und geben Sie eine Grenze an, die Bildansicht. Habe ich erfolgreich durchgeführt, aber danach die Anwendung verwendet diese Aktivität zwei-drei mal ein "force close" Fehler-Meldung angezeigt: Bitmap von VM-Speicher. Bitte helfen Sie mir, zu minimieren, die bitmap-Speicher-Verbrauch in meinem code. Und lassen Sie mich wissen, wie Sie den code ändern, der für die gleichen?
final int BORDER_WIDTH = 5;
//Set the border color
final int BORDER_COLOR = Color.WHITE;
Bitmap res = Bitmap.createBitmap(CAPTURE_IMAGE.getWidth() + 2
* BORDER_WIDTH, CAPTURE_IMAGE.getHeight() + 2 * BORDER_WIDTH,
CAPTURE_IMAGE.getConfig());
System.gc();
Canvas canvas = new Canvas(res);
Paint paint = new Paint();
paint.setColor(BORDER_COLOR);
canvas.drawRect(0, 0, res.getWidth(), res.getHeight(), paint);
canvas.drawBitmap(CAPTURE_IMAGE, BORDER_WIDTH, BORDER_WIDTH, paint);
Matrix mat = new Matrix();
//Set the Imageview position
mat.postRotate(355);
bMapRotate = Bitmap.createBitmap(res, 0, 0, res.getWidth(),
res.getHeight(), mat, true);
System.gc();
res.recycle();
res = null;
paint = null;
canvas = null;
mat = null;
//Set the captured bitmap image in the imageview
mShareImageView.setImageBitmap(bMapRotate);
- ich habe eine schöne JNI-Lösung, vermeidet out-of-Speicher durch das entfernen der max-heap-Größe Begrenzung Barriere . here ist ein link zu meinem snippet. einige Hinweise: - ersetzen Sie in dem code, der jede Instanz von "uint16_t" mit "uint32_t" (das ist der Fehler in meinem code, die ich habe danach gefragt) . - Eingabe-und Ausgabe-bitmap muss mit 8888 config (was ARGB ) - Eingabe von bitmap-recycelt werden, die während des Prozesses . - der code dreht das Bild um 90 Grad counter Uhr weisen . natürlich können Sie es ändern, je nachdem,
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, Sie sollten shrink-Funktion wie diese
er arbeitete für mich, und ich vermied Bitmap aus der VM-Speicher-Ausnahme
in der mainfest-Datei hinzufügen ---> android:largeHeap:"true"
<activity>
- tags in der manifest-Datei, die eine verursacht die Fehler, und es hat nicht funktioniert. Aber wenn ich es in der<application>
tags hat es geklappt. Auch sollteandroid:largeHeap="true"
. Verwenden Sie nur einen Doppelpunkt.Versuchen, die
gc()
Anruf zu Ende. Es sollte ausgeführt werden, nachdem Sie festgelegtres = null
so dass Sie können lassen Sie die unbenutzten Speicher:Nur hinzufügen android:largeHeap="true" in Ihrer manifest-Datei
Ref: largeHeap=true manifest-tag nicht funktioniert?