Сравнить два цвета на изображении? - PullRequest
0 голосов
/ 24 января 2011

Я пытаюсь сравнить данный пиксель с Color.BLACK.Но проблема в том, что он дает ложь для всех изображений.(Я сделал черное изображение, и оно также вернул false!)

public int isItBlackOrWhite(int x , int y)
{
     int c = bimg.getPixel(x, y);   
     if(c == Color.BLACK)
         {System.out.println("Helooo");return 0;}    
     else
      return 1;
}

Также я попытался сравнить его с Color.White, но приложение закрылось и принудительно закрылось!

public int isItBlackOrWhite(int x , int y)
{
     int c = bimg.getPixel(x, y);   
     if(c == Color.WHITE)
         {System.out.println("Helooo");return 0;}    
     else
      return 1;
}

ПРИМЕЧАНИЕ: bimg - это растровое изображение, снятое с камеры.

Ответы [ 6 ]

1 голос
/ 24 января 2011

Во-первых, используйте LogCat для печати комментариев и переменных. (Затмение -> Окно -> Показать представление -> Android -> LogCat. Тогда вы должны увидеть ошибку в журнале.

Это поможет нам найти ошибку.

0 голосов
/ 30 мая 2012

Уродливое решение, но ответы ниже не дают реального решения вашей проблемы. Попробуйте это:

Color white = new Color(0,0,0); // for white
Color black = new Color(255,255,255); // for black
if(yourPixel.equals(white)) { // operate }

Вы также можете создать класс Color Constants и использовать его соответствующим образом, и я думаю, что вы можете найти его в Интернете. Если вы хотите реализовать этот класс, RGB-значение цветов .

0 голосов
/ 15 октября 2011

Color.BLACK - это цвет, но не int.Вам нужно привести их к тому же типу перед сравнением.

0 голосов
/ 24 января 2011

Что касается «черного» изображения: вам нужно другое тестовое изображение.Фотосъемка с помощью камеры никогда не даст вам действительно черную фотографию.Так что найти действительно черные пиксели тоже будет сложно.

(Просто добавьте оператор отладки, чтобы вывести значение c, чтобы проверить это. Для Color.BLACK вы должны получить -16777216 или шестнадцатеричное 0xff000000.)

0 голосов
/ 24 января 2011

Я не знаю специфики используемых вами форматов пикселей, но вы пытаетесь сравнить 32-разрядное целочисленное представление цвета (скорее всего, в формате ARGB) с объектом типа Color. Сначала необходимо получить ARGB-представление объекта Color (возможно, вызвав Color.getRGB ()), прежде чем сравнивать его с результатом getPixel ().

0 голосов
/ 24 января 2011

Проблема может заключаться в том, что вы используете ==, что не совсем соответствует вашему намерению.В java он проверяет, что два объекта - это один и тот же объект, и цвет, который вы получаете из вашей картинки, никогда не будет равен значению, записанному в Color.BLACK

Что вы хотите сделать, это проверить, что значения цветато же самое, красный, зеленый, синий и альфа-каналы.Это контекстно-зависимое равенство, которое обычно реализуется как функция .equals () объекта.

Попробуйте это:

c.equals(Color.BLACK)

вместо

c == Color.BLACK
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...