java - PhotoView库获取像素颜色

标签 java android android-photoview

在我的应用程序中,我使用 chrisbanes 的 PhotoView 库,我用它来使图像可缩放。然后我需要获取图像上触摸的像素的颜色。只要图像不移动,它就可以工作,但是当它例如放大后,返回的颜色与图像的颜色不匹配。 设备需要做什么才能识别图像已移动并返回正确的颜色?

代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final PhotoView photoView = (PhotoView) findViewById(R.id.photo_view);
    photoView.setImageResource(R.drawable.karte);

    photoView.setScaleType(ImageView.ScaleType.FIT_XY);
    photoView.setDrawingCacheEnabled(true);
    photoView.buildDrawingCache(true);

}


 photoView.setOnViewTapListener(new OnViewTapListener() {
       @Override
        public void onViewTap(View view, float x, float y) {

            bitmap = photoView.getDrawingCache();
            int pixel = bitmap.getPixel((int) x, (int) y);
            String text = "x = " + x + ", y = " + y;
            Log.d("Position", text);
            int redValue = Color.red(pixel);
            int greenValue = Color.green(pixel);
            int blueValue = Color.blue(pixel);

            String hex = String.format("%02x%02x%02x", redValue, greenValue, blueValue);

        }
 });

最佳答案

看起来放大时获得错误颜色的原因是 getDrawingCache() 返回原始可绘制对象,而不是放大后的可绘制对象。

您需要使 View 无效,以便 getDrawingCache() 返回新的位图。

@Override
public void onViewTap(View view, float x, float y) {
    photoView.invalidate()
    bitmap = photoView.getDrawingCache();
    // ...
}

关于java - PhotoView库获取像素颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51881829/

相关文章:

android - 无法解析 com.github.chrisbanes :PhotoView:1. 3.1

android - 动画 Android PhotoView 高度

java - Android线性布局背景透明度

java - 使用java的nextprobableprime()获取previousprobableprime

java - 清理 Android 主要 Activity 代码

java - 将类(class)保存到 firebase

android - 在全屏和正常 Activity 之间导航

java - 如何以编程方式更改屏幕分辨率?

java - 如何在对模型使用自动绑定(bind)的 JTable 中显示标题行

java - Lwjgl 启动时出现错误代码 0x502