Подтвердить что ты не робот

Как получить пиксельный цвет в Android?

Я использую Intent для вызова и отображения изображения из галереи, и теперь я включил его, чтобы получить координаты изображения в 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;    }     
    });

Теперь мне нужно сделать; для получения colour (RGB value) точных координат, которые пользователь выбирает, а затем назначить их #FF0000, #00FF00 и #0000FF, но на данный момент, пожалуйста, помогите получить цвет пикселя на основе того, что у меня есть.

Приветствия.

4b9b3361

Ответ 1

Вы можете получить пиксель из представления следующим образом:

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 в "красный". Просто обратите внимание, что говоря, что что-то красное не просто, что красный канал больше нуля. Конечно, Cos 255-Green и 255-Red - желтый. Вы также можете сравнить пиксель с другим цветом. например:

if(pixel == Color.MAGENTA){
   textView.setText("It is Magenta");
}

Надеюсь, что это поможет.

Ответ 2

Вы можете изменить это для своего требования. Этот фрагмент поможет вам получить пиксельный цвет.

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;
}

Ответ 3

Это работает более точно для меня. Ключевым моментом здесь является использование 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 e){
            }
            imgbmp.recycle();

            return true;   
        }
    });