web-dev-qa-db-fra.com

Comment obtenir la couleur des pixels dans Android

J'utilise Intent pour appeler et afficher une image de la galerie, et maintenant je l'ai activé pour obtenir les coordonnées de l'image dans une TextView en utilisant ces:

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

Maintenant, ce que je dois faire, c'est; pour obtenir la color (RGB value) des coordonnées exactes que l'utilisateur sélectionne et plus tard, affectez-les chacune à #FF0000, #00FF00 et #0000FF mais pour l'instant, veuillez aider à obtenir la couleur Pixel en fonction de ce que j'ai.

À votre santé.

48
Sean

Vous pouvez obtenir le pixel de la vue comme ceci:

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

Maintenant, vous pouvez obtenir chaque chaîne avec:

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

Les fonctions Couleur renvoient la valeur dans chaque canal. Donc, tout ce que vous avez à faire est de vérifier si le rouge est 255 et le vert et le bleu sont 0, puis définissez le texte textView sur "c'est rouge". Faites juste attention que dire que quelque chose est rouge ne signifie pas simplement que le canal rouge est supérieur à zéro. "Cos 255-Green et 255-Red est jaune, bien sûr. Vous pouvez également simplement comparer le pixel à une couleur différente. par exemple:

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

J'espère que ça aide.

115
Raz

Vous pouvez le modifier selon vos besoins. Cet extrait vous aidera à obtenir la couleur des pixels.

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

Cela fonctionne plus précisément pour moi. La clé ici est d'utiliser le View.getDrawingCache au lieu de 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