Drehen von Bildern auf android. Gibt es einen besseren Weg?
Habe ich eine app, die zeigt durchaus ein paar Bilder, die der Benutzer, und wir sehen, eine Menge von Fehlermeldungen mit OutOfMemoryError
Ausnahme.
Was wir derzeit tun, ist dies:
//Check if image is a landscape image
if (bmp.getWidth() > bmp.getHeight()) {
//Rotate it to show as a landscape
Matrix m = image.getImageMatrix();
m.postRotate(90);
bmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), m, true);
}
image.setImageBitmap(bmp);
Das offensichtliche problem mit diesem ist, dass wir so erstellen Sie die bitmap aus, das Bild auf den Speicher, und drehen Sie die matrix, das ist ziemlich teuer für den Speicher.
Meine Frage ist einfach:
Gibt es einen besseren Weg, um Bilder zu drehen, ohne dass OutOfMemoryError
?
- twintechs.com/2008/06/...
- Auf welche Linie wirft die Ausnahme
- Also, Sie sind darauf hindeutet, die ich drehen Sie das Bild mit einer animation sogar tho es ist nicht eigentlich eine animierte rotation?
- auf der
Bitmap.createBitmap
es ist möglich zu überschreiten, die VM ' s erlaubt-Speicher und der Fehler ausgelöst. - ich aktualisiert meine Antwort. es hat jetzt eine bessere Lösung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
2 Methoden der rotierenden eines großes Bild:
mittels JNI , wie auf diesen Beitrag.
mithilfe einer Datei : es ist ein sehr langsamer Weg (je nach dem input und dem Gerät , aber immer noch sehr langsam) , was bringt die decodierten gedrehte Bild in die Scheibe zuerst , anstatt es in den Speicher .
code mit einer Datei unter:
können Sie versuchen:
Bitmap.createBitmap
Linie.Beim arbeiten mit vielen Bitmaps sicher sein, rufen Sie die recycle() auf, sobald Sie nicht benötigt werden. Dieser Aufruf wird sofort der freie Speicher im Zusammenhang mit einer bestimmten bitmap.
In Ihrem Fall, wenn Sie brauchen nicht die original-bitmap nach der rotation, dann recyceln Sie es. Etwas entlang der Linien von: