我不明白为什么使用Bitmap.createBitmap()
创建的Bitmap比原始堆中的KB更大(比使用BitmapFactory.decodeResource()
的解码位图更多。
我正在使用LG Optimus One(dpi是160,Android 2.2),我正在用Debug.getNativeHeapAllocatedSize()
测量已分配的内存。
如果我通过这种方式创建了Bitmap(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会将图像放大到200x200,本机堆的大小也会增加c。的 160KB
有人知道,为什么创建Bitmap并解码(缩放)Bitmap这么大?
感谢您的回答。
以下是我用来衡量的代码:
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
答案 0 :(得分:3)
BitmapFactory.Options options = new BitmapFactory.Options();
options.inScaled=false;
Bitmap bitmap;
bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.whatever, options);
不太清楚你的意图是什么......上面的代码片段将创建一个Bitmap R.drawable.whatever在实际大小...没有缩放...与创建资源时相同的尺寸。< / p>
希望这有帮助。
答案 1 :(得分:1)
对于200 * 200 * 4字节,“有人知道,为什么创建Bitmap并解码(缩放)Bitmap这么大?”
160KB似乎是正确的。您的问题应该是“为什么MDPI位图如此之小?”。
我想知道MDPI版本是否先前已被其他一些代码加载,并且这些数据正在被重用。