为什么创建的位图比Android中资源中的解码位图大?

问题描述

| 我不明白为什么用created0 than创建的位图要比用
BitmapFactory.decodeResource()
解码的位图要大(本机堆中的kB更大)。 我正在使用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会将图片放大到200x200,原生堆的大小也会增加c。 160kB。 有人知道,为什么创建位图和解码(缩放)位图这么大? 感谢您的回答。 这是我用来衡量的代码
long createdSizeStart = Debug.getNativeHeapAllocatedSize();
Bitmap createdBitmap = Bitmap.createBitmap(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版本,并且是否正在重用此数据。