Bitmap.getPixel(x,y)的RGB方法在不同设备上返回略有不同的值

时间:2018-07-29 22:59:17

标签: java android colors bitmap

ImageView colors;
Bitmap bitmap;
...
//onTouch:
@Override
public boolean onTouch(View v, MotionEvent ev) {
    final int evX = (int) ev.getX();
    final int evY = (int) ev.getY();
    colors.setDrawingCacheEnabled(true);
    bitmap = Bitmap.createBitmap(colors.getDrawingCache());
    colors.setDrawingCacheEnabled(false);

    int touchedColor = bitmap.getPixel(evX, evY);
    int red = Color.red(touchedColor);
    int green = Color.green(touchedColor);
    int blue = Color.blue(touchedColor);
    ...
}

这是问题所在:在Samsung Galaxy S8上,当您单击该颜色时,touchedColor等于-831953。在Moto Z2 Play上,它是-897230,在Android Studio上的每个模拟器上也是如此。这是当您在两个电话和每个模拟器上单击图像上完全相同的像素位置时。彩色位图来自drawable-nodpi文件夹,是PNG。

1 个答案:

答案 0 :(得分:0)

我自己找到了答案:答案是png图像在不同设备上的显示方式有所不同。使用bmp图片。

RGB使用png图像取决于设备:http://www.libpng.org/pub/png/spec/1.2/PNG-ColorAppendix.html

BMP设计为使RGB与设备无关