簡體   English   中英

為什么創建的位圖比Android中資源中的解碼位圖大?

[英]Why is created Bitmap bigger than decoded Bitmap from Resources in Android?

我不明白為什么使用Bitmap.createBitmap()創建的Bitmap比使用BitmapFactory.decodeResource()解碼的Bitmap更大(本機堆中的kB更大BitmapFactory.decodeResource()

我正在使用LG Optimus One(dpi是160,Android 2.2),並且正在使用Debug.getNativeHeapAllocatedSize()測量分配的內存。

如果通過這種方式創建位圖(200x200):

Bitmap createdBitmap = Bitmap.createBitmap(200, 200, Config.ARGB_8888);

然后,本機堆的大小增加了c。 160kB

但是,如果我從資源(來自文件夾drawable-mdpi )中解碼了PNG圖片(200x200):

Bitmap mdpiBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image_mdpi);

大小增加了c。 只有3kB

但是,如果我從drawable-ldpi解碼PNG圖像(150x150),那么Android drawable-ldpi圖像放大到200x200,並且本機堆的大小也會增加c。 160kB

有人知道,為什么創建位圖和解碼(縮放)位圖這么大?

感謝您的回答。

這是我用來測量的代碼:

long createdSizeStart = Debug.getNativeHeapAllocatedSize();
Bitmap createdBitmap = Bitmap.createBitmap(200, 200, Config.ARGB_8888);
long createdSize = Debug.getNativeHeapAllocatedSize() - createdSizeStart;

long resourceMdpiSizeStart = Debug.getNativeHeapAllocatedSize();
Bitmap resourceMdpiBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image_mdpi);
long resourceMdpiSize = Debug.getNativeHeapAllocatedSize() - resourceMdpiSizeStart;

long resourceLdpiSizeStart = Debug.getNativeHeapAllocatedSize();
Bitmap resourceLdpiBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image_ldpi);
long resourceLdpiSize = Debug.getNativeHeapAllocatedSize() - resourceLdpiSizeStart;

Log.i("test", "Created: " + createdSize + " B, " + createdBitmap.getWidth() + "x" + createdBitmap.getHeight());
Log.i("test", "Resource MDPI: " + resourceMdpiSize + " B, " + resourceMdpiBitmap.getWidth() + "x" + resourceMdpiBitmap.getHeight());
Log.i("test", "Resource LDPI: " + resourceLdpiSize + " B, " + resourceLdpiBitmap.getWidth() + "x" + resourceLdpiBitmap.getHeight());

輸出為:
創建:163952 B,200x200
資源MDPI:3184 B,200x200
資源LDPI:164424 B,200x200

BitmapFactory.Options options = new BitmapFactory.Options();
options.inScaled=false;
Bitmap bitmap;
bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.whatever, options);

不太清楚您的意圖是什么...上面的代碼段將創建一個Bitmap R.drawable。,無論它的實際大小是什么,沒有縮放比例,其尺寸與創建資源時的尺寸相同。

希望這可以幫助。

“有人知道,為什么創建位圖並解碼(縮放)位圖這么大?”

160KB似乎對於200 * 200 * 4字節是正確的。 您的問題應該是“為什么MDPI位圖這么小?”。

我想知道以前是否已通過其他一些代碼加載了MDPI版本,並且是否正在重用此數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM