Bild zuschneiden und Größe ändern in Android
Folgte ich den Anweisungen unten, um ein Bild zu beschneiden.
http://coderzheaven.com/index.php/2011/03/crop-an-image-in-android/
Die Höhe und Breite des endgültigen beschnitten bitmap-Bild sind beide größer sind als der Bildschirm.
Während des resize und crop-process -, out-of-memory-Fehler geworfen wurde und die app ist gezwungen, zu beenden.
Error-log:
04-09 11:37:28.658: ERROR/dalvikvm-heap(4003): 435176-byte external allocation too large for this process.
04-09 11:37:28.658: ERROR/GraphicsJNI(4003): VM won't let us allocate 435176 bytes
04-09 11:37:28.668: WARN/dalvikvm(4003): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): FATAL EXCEPTION: main
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): at android.graphics.Bitmap.nativeCreate(Native Method)
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): at android.graphics.Bitmap.createBitmap(Bitmap.java:468)
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): at android.graphics.Bitmap.createBitmap(Bitmap.java:435)
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): at com.test.Test.onCreate(Test.java:57)
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): at android.os.Handler.dispatchMessage(Handler.java:99)
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): at android.os.Looper.loop(Looper.java:123)
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): at android.app.ActivityThread.main(ActivityThread.java:4627)
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): at java.lang.reflect.Method.invokeNative(Native Method)
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): at java.lang.reflect.Method.invoke(Method.java:521)
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): at dalvik.system.NativeStart.main(Native Method)
Weiß jemand, wie das problem zu lösen ?
Dank.
======
Update: ich habe das problem gelöst.
Poste den Fehler, zeigen einige code! Wie sollen wir helfen wenn wir nicht wissen, was das problem ist!!!!
Der Fehler wird die app gezwungen, um zu beenden.
ausführen "adb logcat AndroidRuntime:* *:S", um die crash-log. Post, die mit Ihrem code und wir helfen können.
Der Fehler wird die app gezwungen, um zu beenden.
ausführen "adb logcat AndroidRuntime:* *:S", um die crash-log. Post, die mit Ihrem code und wir helfen können.
InformationsquelleAutor user403015 | 2011-04-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwendet werden können Bild zuschneiden mit folgenden code, kann Ihr problem lösen.
Oben genannten Methode machen postScalling der Bild vor dem zuschneiden, so können Sie das beste Ergebnis erhalten Sie mit freigestelltes Bild ohne OOM Fehler.
Weitere Details finden Sie dieser blog
InformationsquelleAutor Hitesh Patel
Meine Kollegin gerade Walmdach mich zu diesem Android-API... siehe ThumbnailUtils.
Tut es skalieren und beschneiden für Sie.
http://developer.android.com/reference/android/media/ThumbnailUtils.html#extractThumbnail(android.graphics.Bitmap, int, int)
InformationsquelleAutor Scott Birksted
Wenn Ihr code unterscheidet sich vom Beispiel, Sie haben, um es zu veröffentlichen, um genaue Hilfe. Ansonsten nur auf Basis des log - hier ist eine Antwort:
In dem Beispiel, das Sie verwenden, kann der Entwickler ist das zuschneiden eines Bildes in seinem app-resources-Ordner (was sein könnte, relativ klein zu starten) zu einem 300x300 bitmap-Bild. Versuchen Sie zunächst, eine kleinere Größe zuschneiden Bild in einer eigenen app, die eine kleinere Ausgabe Größe, um zu sehen, ob es ein problem mit dem code, oder wenn Sie ein Bild, das zu groß für Ihren code oder Gerät.
Da du sagtest, das Letzte Bild, das Sie zuschneiden größer ist als der Bildschirm, dass ist wohl das Problem, und Sie begegnet einem grundlegenden Herausforderung, die die Verwendung von bitmaps in Android. Bitmap-Datei, die Größe ist eine Funktion der pixel-Breite mal Höhe - Sie bekommen größer schnell.
Können Sie lösen, indem Sie googeln die anderen Teile deinen log, wie in "bitmap size exceeds VM budget" und du findest mehrere threads auf stackoverflow, die helfen, so wie diese.
Seltsam out-of-memory-Problem beim laden von einem Bild zu einem Bitmap-Objekt
Können Sie es lösen durch die Verwendung von bitmap-Optionen und inSampleSize, und andere Techniken.
InformationsquelleAutor developer
Blick auf die ähnliche Diskussion
here
, Sie scheinen mit der gleichenbyte external allocation too large for this process
Fehler.InformationsquelleAutor While-E
Ich weiter überprüft Sie die folgenden Anweisungen.
http://coderzheaven.com/index.php/2011/03/crop-an-image-in-android/
Fand ich, dass die codes nicht gut genug, und einige von Ihnen sind überflüssig.
Ernte ein großes bitmap-Bild, gibt es keine Notwendigkeit zu verwenden-matrix, die Aufgabe zu tun.
Nur Leinwand.drawBitmap-Methode können die Ernte-das große Bild !
Auch keine Notwendigkeit, berühren Sie den BitmapFactory.Optionen.
Nun habe ich einfach das Bild beschneiden, und lassen Sie die Bildansicht vergrößern zu können. Nicht mehr out-of-memory-Fehler. Bingo !
InformationsquelleAutor user403015
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): an com.test.Test.onCreate(Test.java:57)
Wenn ich mich nicht Irre, in
on line 57, Sie haben
Wenn das so ist, das referenzierte Bild ist so groß, dass Android versucht, zu decodieren und in eine bitmap, es cosumes alle die Kostenlose VM-heap und wirft theerror. Sie cant decode große bitmaps mit
Kopierte ich den code aus dem link, dass user699618 empfohlen, ich hab es vor und es löst das problem).
Danach können Sie einfach verwenden
CENTER_CROP
oder was auch immer Sie brauchen, aufImageView.setScaleType()
.Finden Sie die Skala Typ-Optionen in hier und setScaleType details in hete.
Hoffe, das hilft.
ich würde auch empfehlen nicht so schwer die Bilder in den Ressourcen. Machen Sie die kleinen vor dem speichern in die resorce FORDER doch.
InformationsquelleAutor J-Rou
InformationsquelleAutor Vishnu
ich hoffe, dass ich nützlich sein
InformationsquelleAutor Wyrm