【问题标题】:Bitmap.getPixel(x, y)'s RGB methods return slightly different values on different devicesBitmap.getPixel(x, y) 的 RGB 方法在不同设备上返回的值略有不同
【发布时间】:2018-07-29 22:59:17
【问题描述】:
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);
    ...
}

问题出在:在三星 Galaxy S8 上,当您单击此一种颜色时,touchColor 等于 -831953。在 Moto Z2 Play 上是 -897230,在 Android Studio 上的每个模拟器上也是如此。这是当您在两部手机和每个模拟器上单击图像上完全相同的像素位置时。颜色中的位图来自 drawable-nodpi 文件夹,是 PNG。

【问题讨论】:

    标签: java android colors bitmap


    【解决方案1】:

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

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

    BMP 旨在让 RGB 独立于设备

    【讨论】:

    • 您能否提供一些关于为什么它们的处理方式不同的来源?
    猜你喜欢
    • 2017-11-16
    • 1970-01-01
    • 2016-05-27
    • 2017-01-31
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    • 1970-01-01
    相关资源
    最近更新 更多