Как получить пиксельный цвет в Android
Я использую Intent для вызова и показа изображения из Gallery, и теперь я включил его, чтобы получить координаты изображения в TextView, используя эти:
final TextView textView = (TextView)findViewById(R.id.textView);
final TextView textViewCol = (TextView)findViewById(R.id.textViewColor);
targetImage.setOnTouchListener(new ImageView.OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
int x=0;
int y=0;
textView.setText("Touch coordinates : " +
String.valueOf(event.getX()) + "x" + String.valueOf(event.getY()));
ImageView imageView = ((ImageView)v);
Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap();
int pixel = bitmap.getPixel(x,y);
int redValue = Color.red(pixel);
int blueValue = Color.blue(pixel);
int greenValue = Color.green(pixel);
if(pixel == Color.RED){
textViewCol.setText("It is RED");
}
/*if(redValue == 255){
if(blueValue == 0)
if(greenValue==0)
textViewCol.setText("It is Red");
}*/
return true; }
});
Теперь, что мне нужно сделать, это; чтобы получить color (RGB value)
точных координат, которые выбирает пользователь, а затем присваивать каждому #FF0000
, #00FF00
а также #0000FF
но пока, пожалуйста, помогите получить цвет пикселей в зависимости от того, что у меня есть.
Приветствия.
3 ответа
Вы можете получить пиксель из вида следующим образом:
ImageView imageView = ((ImageView)v);
Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap();
int pixel = bitmap.getPixel(x,y);
Теперь вы можете получить каждый канал с:
int redValue = Color.red(pixel);
int blueValue = Color.blue(pixel);
int greenValue = Color.green(pixel);
Функции Color возвращают значение в каждом канале. Таким образом, все, что вам нужно сделать, это проверить, если красный 255, а зеленый и синий 0, а затем установить текст textView на "это красный". Просто обратите внимание, что если говорить, что что-то красное, это не значит, что красный канал больше нуля. Конечно, потому что 255-зеленый и 255-красный - желтый. Вы также можете просто сравнить пиксель с другим цветом. например:
if(pixel == Color.MAGENTA){
textView.setText("It is Magenta");
}
Надеюсь, поможет.
Вы можете изменить это по вашему требованию. Этот фрагмент поможет вам получить цвет пикселя.
public static int getDominantColor(Bitmap bitmap) {
Bitmap newBitmap = Bitmap.createScaledBitmap(bitmap, 1, 1, true);
final int color = newBitmap.getPixel(0, 0);
newBitmap.recycle();
return color;
}
Это работает более точно для меня. Ключевым моментом здесь является использование View.getDrawingCache
вместо DrawableBitmap
,
palleteView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent ev) {
// TODO Auto-generated method stub
ImageView img = (ImageView) v;
final int evX = (int) ev.getX();
final int evY = (int) ev.getY();
img.setDrawingCacheEnabled(true);
Bitmap imgbmp = Bitmap.createBitmap(img.getDrawingCache());
img.setDrawingCacheEnabled(false);
try {
int pxl = imgbmp.getPixel(evX, evY);
pickedColorView.setBackgroundColor(pxl);
}catch (Exception ignore){
}
imgbmp.recycle();
return true;
}
});