Android 位图 getPixel 取决于密度?

Mik*_*ite 2 android bitmap android-2.3-gingerbread

正确的代码。给定

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resId);
Drawable drawable = getResources().getDrawable(resId);
Run Code Online (Sandbox Code Playgroud)

我明白了

bitmap.getWidth() == drawable.getIntrinsicWidth() == 9
Run Code Online (Sandbox Code Playgroud)

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

设置位图的密度似乎没有什么区别。我应该如何查询图像中真实位置的像素?我宁愿不将所有东西除以密度(通常甚至不可能)。

谢谢

Mar*_*lts 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
Run Code Online (Sandbox Code Playgroud)

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