скрытый массив пикселей от изображения к цвету для сравнения

Я использую приведенный ниже код, чтобы получить пиксель, предоставив растровое изображение

public int[] foo(Bitmap bitmapFoo) {
    int[] pixels;
  //  Bitmap bitmapFoo ;            
    int height = bitmapFoo.getHeight();
    int width = bitmapFoo.getWidth();

    pixels = new int[height * width];

    bitmapFoo.getPixels(pixels, 0, width, 1, 1, width - 1, height - 1); 
   return pixels;

}

как теперь сравнить его с похожим изображением ??

                           int[] i = foo(img2);
                int[] i2 = foo(img1);

                if (i==i2) {

                    txt.setText("same");
                }else{


                    txt.setText("different");
                }

Даже если изображение похоже на другое, оно все равно будет отличаться. Как этого избежать?

Правильно ли сравнение ?? или я что то не так делаю ??


person Jason Wood    schedule 22.08.2013    source источник
comment
Что получится, если использовать одно и то же изображение для i и i2? Также используйте if (Arrays.equals(i, i2)) {... }.   -  person Vikram    schedule 22.08.2013
comment
Привет, Викрам. Правильный ли подход? Пробуем ваше предложение.   -  person Jason Wood    schedule 22.08.2013
comment
Все еще получаются разные. Я полагаю, чтобы получить разницу и проверить процентное совпадение или что-то в этом роде?   -  person Jason Wood    schedule 22.08.2013
comment
Также, как преобразовать это в цветовой код, например, получить альфа, зеленый, синий, красный из массива int i ??   -  person Jason Wood    schedule 22.08.2013
comment
Вы можете найти ответ здесь: Ссылка. Чтобы получить цвет из пикселя: Ссылка.   -  person Vikram    schedule 22.08.2013


Ответы (1)


Я считаю, что проблема в том, что вы сравниваете объекты. Когда вы создаете два объекта независимо, они не равны.

Если у вас есть i.equals(i2), он должен работать, как задумано.

.equals сравнивает значения, а не проверяет, являются ли объекты на самом деле одним и тем же объектом

РЕДАКТИРОВАТЬ: Я забыл, что вам, возможно, придется переопределить .equals для достижения желаемого результата. Этот вопрос может вам помочь. Почему мы должны переопределять метод equals () в Java?

person TheThirdOne    schedule 22.08.2013
comment
Я тоже пробовал это, но все еще по-другому if (iequals (i2)) {t.setText (same); } else {t.setText (другой); } - person Jason Wood; 22.08.2013