代码权利。给定
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);
也适用于扩大的维度。
设置位图的密度似乎没有区别。我应该如何在实际位置查询图像的像素?我宁愿不按密度划分所有东西(有时甚至不可能)。
由于
答案 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
。