web-dev-qa-db-ja.com

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_にそれぞれ割り当てますが、現時点ではPixelの取得を支援してください私が持っているものに基づいた色。

乾杯。

48
Sean

次のようにビューからピクセルを取得できます。

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関数は、各チャネルの値を返します。したがって、必要なことは、textViewテキストを「赤です」に設定するよりも、赤が255で、緑と青が0であるかどうかを確認することだけです。何かが赤であると言うことは、単に赤チャンネルがゼロより大きいということではないことに注意してください。もちろん、Cos 255-Greenと255-Redは黄色です。ピクセルを別の色と比較することもできます。例えば:

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

それが役に立てば幸い。

115
Raz

これを要件に合わせて変更できます。このスニペットは、ピクセルの色を取得するのに役立ちます。

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
onexf

これは私にとってより正確に機能します。ここで重要なのは、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;   
    }
});
1
kc ochibili