21

我的 android 应用程序可绘制文件夹中有一个 jpg 图像,分辨率为 1000x600。我像这样将该图像加载到位图

 Bitmap bitMap = BitmapFactory.decodeResource(getResources(), R.drawable.image);

在此之后我调用bitMap .getWidth()返回 1500。它怎么可能?以及如何获得正确的图像宽度和高度?

4

1 回答 1

43

这可能是因为密度不同。您的资源可能存储在中等密度的文件夹中,但您的设备是 hdpi。中密度为160dpi,高密度为240dpi。因此,您的位图被缩放到原来大小的 1.5 倍。有关更多信息,请参阅多个屏幕上的文档。

如果资源在正确的密度下不可用,系统会加载默认资源并根据需要放大或缩小它们以匹配当前屏幕的密度。

如果您打算将其用于高密度,请将其放入 drawable-hdpi 而不是 drawable 或 drawable-mdpi。

更新:

如果您希望它忽略密度,请将其放在 drawable-nodpi 文件夹中。也来自同一个文档:

避免预缩放的最简单方法是将资源放在具有 nodpi 配置限定符的资源目录中。例如:

res/drawable-nodpi/icon.png

当系统使用此文件夹中的 icon.png 位图时,它不会根据当前设备密度对其进行缩放。

于 2011-11-19T23:54:35.033 回答