How to make if statement with color code

Refresh

December 2018

Views

2.4k time

2

I got a little problem, what I think, can't be hard. but somehow, I miss that "can't be hard" part :).

I got a code, that reads the colors of an image:

bmp = BitmapFactory.decodeResource(getResources(), R.drawable.four_colors);


    //define the array size
    rgbValues = new int[bmp.getWidth()][bmp.getHeight()]; 

    //Print in LogCat's console each of one the RGB and alpha values from the 4 corners of the image
    //Top Left
    for (int j = 0; j < 1000; j++){
        for (int k = 0; k < 1000; k++){
    Log.i("Pixel Value", "pixel x="+j +k + Integer.toHexString(bmp.getPixel(j, k)));
    test = Integer.toHexString(bmp.getPixel(j,  k));


        }
    }

    //get the ARGB value from each pixel of the image and store it into the array
    for(int i=0; i < bmp.getWidth(); i++)
    {
        for(int j=0; j < bmp.getHeight(); j++)
        {
            //This is a great opportunity to filter the ARGB values
            rgbValues[i][j] = bmp.getPixel(i, j);               
        }   
    }

    System.out.println(PixelNumber);
    System.out.println(test);
}

This code works like a charm. But I tried to implement an if statement like:

if (color == black){
    number++;
}

So every pixels he sees that is black, he must increase the number with 1.

Tried almost everything I could came up to make a good if statement around this code, but nothing seems to work. So what is the correct place and if statement to make in this code?

And maybe if you got more time (do not put too much effort in this if you don't want) is it possible to check on a color-range instead of 1 color only, So it picks all green colors. (same as Color range in photoshop).

3 answers

0

Bitmap#getPixel(int, int)возвращает intзначение, представляющее прозрачность (альфа) и цвет (RGB) данного пикселя.

Значение RGB черного является (0x00, 0x00, 0x00). Так что если вы хотите проверить черный и игнорировать значение альфа, тест должен идти , как это:

if ((rgbValue[i][j] & 0x00ffffff) == 0) {
   // this pixel is black
   number++;
}

Цветовая гамма очень сложно. Сначала мы должны вычислимое определение зеленого (например). зеленый довольно субъективно. Если у вас есть алгоритм под рукой, поместите его в другой метод и сделать вызов , как это:

if (isGreenish(rgbValue[i][j])) {     // magic method
   // this pixel is some sort of green
   number++;
}
1

GetPixel возвращает 4 байта из ARGB в виде целого числа. То , что вы должны сделать , это составить цвет вы хотите количеству ( ARGB метод Color поможет вам) и тест на эту величину getPixel(x, y).
Для черного это будет легко:

if(Color.BLACK == bmp.getPixel(x, y))
     //doit

Для диапазонов вы можете использовать green/ red/ blueметоды, каждый из которых возвращает значение этого компонента. Если он не равен нулю, то пиксель имеет цвет от этого компонента.

0

вы можете, что с условием, как если (rgbValues ​​[я] [J] == Color.BLACK).

что код будет подобен следующему.

 //get the ARGB value from each pixel of the image and store it into the array
    for(int i=0; i < bmp.getWidth(); i++)
    {
        for(int j=0; j < bmp.getHeight(); j++)
        {
            //This is a great opportunity to filter the ARGB values

            rgbValues[i][j] = bmp.getPixel(i, j);   
            if(rgbValues[i][j] == Color.BLACK) {

        }   
    }
Raj