PhotoView Library получить цвет пикселей
В моем приложении я использую библиотеку PhotoView от chrisbanes, которую я использую для увеличения изображения. Затем мне нужно получить цвет пикселя, который касается изображения. Это работает, пока изображение не перемещено, но когда оно, например, увеличено, возвращенные цвета не совпадают с цветом изображения. Что необходимо, чтобы устройство распознало, что изображение было перемещено, и вернуло нужный цвет?
Код:
@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);
}
});
1 ответ
Решение
Похоже, причина, по которой вы получаете неправильные цвета при увеличении, заключается в том, что getDrawingCache()
возвращает исходный объект, а не увеличенный.
Вы должны сделать недействительным представление так, чтобы getDrawingCache()
вернуть свежий растр.
@Override
public void onViewTap(View view, float x, float y) {
photoView.invalidate()
bitmap = photoView.getDrawingCache();
// ...
}