从资源加载后位图宽度/高度不同
Posted
技术标签:
【中文标题】从资源加载后位图宽度/高度不同【英文标题】:Bitmap width/height different after loading from Resource 【发布时间】:2011-07-04 22:22:31 【问题描述】:第一。我是 android 编码的新手 :)
我所做的是从我的 res/drawable-mdpi 加载位图
BitmapFactory.decodeResource(getResources(), R.drawable.cat_ground_01);
在我注销位图的宽度/高度后,它会告诉我另一个值,然后位图实际上是。
这有点难以放置像素完美的位图,例如将面部位图与嘴部位图重叠。
也许我只是缺少有关此主题的一些知识:9 我希望你能帮忙。
【问题讨论】:
【参考方案1】:你不能把资源放在nodpi文件夹里吗?
即res/drawable-nodpi
这是我过去所做的。
【讨论】:
【参考方案2】:在我注销位图的宽度/高度后,它会告诉我另一个值,然后位图实际上是。
从 /drawable 加载位图后检查您的 options.inTargetDensity 和 options.inDensity。它们不相等(例如 160 和 240)。如果 options.inScaled 设置为 true(默认) - 这就是位图自动重新缩放的原因。
另一种方法是使用 Bitmap.createScaledBitmap 在加载后重新缩放图像。因为有时你需要 inScaled=true
//Target dimensions
int iW = 300;
int iH = 200;
Bitmap mOriginalBitmap = new Bitmap;
BitmapFactory.Options options = new BitmapFactory.Options();
//Load image from resource
mOriginalBitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.sample_image_900px, options);
//Scale to target size
mOriginalBitmap = Bitmap.createScaledBitmap(mOriginalBitmap, iW, iH, true);
【讨论】:
这会带来额外的性能问题。当确实需要 inScaled 时,这是一种解决方法。【参考方案3】:当您执行 Bitmapfactory.decodeResource() 时,Android 默认会选择“匹配”的 dpi 版本进行解码,您提到的代码中发生的情况将产生:
您无法指定它是 mdpi、hdpi 还是其他格式,它将选择与您正在运行的系统匹配的版本。即,如果您在 mdpi 设备上运行,它将解码 mdpi 版本;在 ldpi 中,然后是 ldpi 版本。
1234563大约 1.5 倍大);同样,如果您的设备分辨率较低,那么它会缩小图像我想这就是发生在你身上的事情。对于 BitmapFactory,它实际上可以选择不缩放图像:
http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html
将 inScaled 设置为 false 即可。
【讨论】:
非常感谢。我认为类似的事情正在发生,但我确定。以上是关于从资源加载后位图宽度/高度不同的主要内容,如果未能解决你的问题,请参考以下文章