2

对代码的权利。给定

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resId);
Drawable drawable = getResources().getDrawable(resId);

我明白了

bitmap.getWidth() == drawable.getIntrinsicWidth() == 9

虽然实际图像是6x6像素。关键是密度是240,因此比例1.5DENSITY_DEFAULT = 160。这本身不是这样的问题,但bitmap.getPixel(x, y);也适用于扩大的尺寸。

设置位图的密度似乎没有什么区别。我应该如何在真实位置查询图像的像素?我宁愿不按密度划分所有内容(通常甚至不可能)。

谢谢

4

1 回答 1

5

首先对这里发生的事情发表一些评论。你得到的 Bitmap 实际上是重新采样的;它的像素数据适用于 9x9 图像。该方法bitmap.getWidth()不受调用的影响bitmap.setDensity()

要在阻止 Android 框架为您重新采样的同时加载位图,请创建一个BitmapFactory.Options实例并将inScaled设置为false,然后将其传递给 decodeResource():

BitmapFactory.Options options = new BitmapFactory.Options();
options.inScaled = false;
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resId, options);
// Now bitmap.getWidth() == 6

请注意,它是 UI 中使用的重新采样版本(除非您明确解决此问题),因此如果您想对bitmap.getPixel(x,y);在 UI 中绘制的位图进行操作,则不应使用inScaled = false.

于 2011-10-28T14:01:37.250 回答