PhotoView Library 获取像素的颜色
PhotoView Library get color of pixels
在我的应用程序中,我使用了 chrisbanes 的 PhotoView 库,我用它来使图像可缩放。然后我需要获取图像上触摸的像素的颜色。只要图像没有移动它就可以工作,但是当它是例如放大后,返回的颜色与图像的颜色不匹配。
需要什么才能让设备识别出图像已移动并且 returns 正确的颜色?
代码:
@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()
return 是原始可绘制对象,而不是放大后的可绘制对象。
您需要使视图无效,以便 getDrawingCache()
到 return 新位图。
@Override
public void onViewTap(View view, float x, float y) {
photoView.invalidate()
bitmap = photoView.getDrawingCache();
// ...
}
在我的应用程序中,我使用了 chrisbanes 的 PhotoView 库,我用它来使图像可缩放。然后我需要获取图像上触摸的像素的颜色。只要图像没有移动它就可以工作,但是当它是例如放大后,返回的颜色与图像的颜色不匹配。 需要什么才能让设备识别出图像已移动并且 returns 正确的颜色?
代码:
@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()
return 是原始可绘制对象,而不是放大后的可绘制对象。
您需要使视图无效,以便 getDrawingCache()
到 return 新位图。
@Override
public void onViewTap(View view, float x, float y) {
photoView.invalidate()
bitmap = photoView.getDrawingCache();
// ...
}