Es gibt mindestens zwei Methoden, um eine Bitmap in Android zu skalieren, Eine besteht darin, "inScaled, inDensity, inTargetDensity" in "BitmapFactory.Options" zu verwenden, wenn eine Bitmap-Quelle dekodiert wird. Die andere Möglichkeit besteht darin, eine "Matrix" in "Bitmap.createBitmap" zu verwenden.
Was mich interessiert, ist der Unterschied zwischen diesen beiden Methoden? Was ist mit der Qualität der produzierten Bitmap? Und was ist mit der Speichernutzung? usw. ...
Wenn Sie BitmapFactory
mit den richtigen inScale-Optionen verwenden, können Sie mehr Speichereffizienz erzielen als mit Bitmap.createScaledBitmap()
oder Bitmap.createBitmap()
mit einer Matrixskala. Es ist jedoch komplizierter.
Auschecken Wie skaliere ich ein Streaming-Bitmap an Ort und Stelle, ohne zuerst das gesamte Bild zu lesen? für Details.
Ein Unterschied, den ich gefunden habe, war, dass die Verwendung von BitmapFactory options.inSampleSize zum Skalieren von Bitmaps nicht so granular ist, da die Skalierung 1 / inSampleSize ist und da inSampleSize eine ganze Zahl sein muss, werden Sie mit Skalierung wie 1/2 enden , 1/3, 1/4 usw., aber nichts mehr als das.
Bitmap.createScaledBitmap()
, obwohl speicherintensiver, ermöglicht eine granularere Skalierung mit einer Auflösung von bis zu 1 dpi.
Es gibt keinen "großen" Unterschied. Ein Vorteil bei der Verwendung von BitmapFactory.Options
besteht darin, dass Sie die Breite / Höhe von Bitmap
überprüfen können, ohne Speicher für die tatsächlichen Bitmap
-Pixel zuzuweisen.
Sie können auch leicht sehen, welche Optionen BitmapFactory.Options
haben und vergleichen Sie diese mit Bitmap.createBitmap()
. Im Allgemeinen ist BitmapFactory.Options
wie eine "Werkzeug" API, um das Dekodieren und Sampling Bitmap
s einfacher zu machen.