it-swarm-id.com

Cara Mendapatkan Pixel Color di Android

Saya menggunakan Intent untuk menelepon dan menampilkan gambar dari Galeri, dan sekarang saya membuatnya memungkinkan untuk mendapatkan saya koordinat gambar di TextView menggunakan ini:

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

Sekarang yang perlu saya lakukan adalah; untuk mendapatkan color (RGB value) dari koordinat yang tepat yang dipilih oleh pengguna dan kemudian menugaskan masing-masing untuk #FF0000, #00FF00 dan #0000FF tetapi untuk saat ini, tolong bantu untuk dapatkan warna Pixel berdasarkan apa yang saya miliki.

Tepuk tangan.

48
Sean

Anda bisa mendapatkan piksel dari tampilan seperti ini:

ImageView imageView = ((ImageView)v);
Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap();
int pixel = bitmap.getPixel(x,y);

Sekarang Anda bisa mendapatkan setiap saluran dengan:

int redValue = Color.red(pixel);
int blueValue = Color.blue(pixel);
int greenValue = Color.green(pixel);

Fungsi Warna mengembalikan nilai di setiap saluran. Jadi yang harus Anda lakukan adalah memeriksa apakah Merah adalah 255 dan hijau dan biru adalah 0, daripada mengatur teks textView menjadi "itu merah". Perhatikan bahwa mengatakan sesuatu itu merah bukan hanya karena saluran merah itu lebih besar dari nol. 'Cos 255-Green dan 255-Red berwarna kuning, tentu saja. Anda juga dapat membandingkan piksel dengan warna yang berbeda. sebagai contoh:

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

Semoga ini bisa membantu.

115
Raz

Anda dapat memodifikasi ini untuk kebutuhan Anda. Cuplikan ini akan membantu Anda mendapatkan warna piksel.

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

Ini bekerja lebih akurat untuk saya. Kuncinya di sini adalah menggunakan View.getDrawingCache bukan 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