Как сделать, если заявление с цветным кодом - PullRequest
2 голосов
/ 08 февраля 2012

У меня есть небольшая проблема, что я думаю, не может быть трудно. но почему-то я скучаю по этой "не может быть сложной" части:).

Я получил код, который читает цвета изображения:

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

Этот код работает как брелок. Но я попытался реализовать оператор if, например:

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

Таким образом, каждый пиксель, который он видит черным, должен увеличивать число на 1.

Попробовал почти все, что я мог, чтобы сделать хороший оператор if вокруг этого кода, но, похоже, ничего не работает. Так что же является правильным местом и если заявление сделать в этом коде?

И, может быть, если у вас есть больше времени (не прилагайте слишком много усилий, если вы этого не хотите), можно ли проверить цветовую гамму вместо только одного цвета, поэтому он выбирает все зеленые цвета. (аналогично цветовой гамме в фотошопе).

Ответы [ 3 ]

1 голос
/ 08 февраля 2012

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

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

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

0 голосов
/ 08 февраля 2012

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

Значение RGB черного цвета (0x00, 0x00, 0x00).Поэтому, если вы хотите проверить черный цвет и игнорировать альфа-значение, тест должен выглядеть следующим образом:

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

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

if (isGreenish(rgbValue[i][j])) {     // magic method
   // this pixel is some sort of green
   number++;
}
0 голосов
/ 08 февраля 2012

вы можете сделать это с условием типа if (rgbValues ​​[i] [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) {

        }   
    }
...