Android位图getPixel取决于密度?

时间:2011-10-28 12:31:25

标签: android bitmap android-2.3-gingerbread

代码权利。给定

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

我得到了

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

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

设置位图的密度似乎没有区别。我应该如何在实际位置查询图像的像素?我宁愿不按密度划分所有东西(有时甚至不可能)。

由于

1 个答案:

答案 0 :(得分:3)

首先评论一下这里发生了什么。您获得的位图实际上是重新采样的;其像素数据用于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中使用的重采样版本(除非您明确解决此问题),因此如果您想在UI中绘制的位图上执行bitmap.getPixel(x,y);,则不应该使用inScaled = false