Огромные отрицательные значения, извлеченные с помощью метода getPixel()

У меня проблема с приложением для обработки изображений, которое я разрабатываю (новичок здесь). Я пытаюсь извлечь значение определенных пикселей с помощью метода getPixel().

У меня есть проблема. Число, которое я получаю с помощью этого метода, представляет собой огромное отрицательное число, что-то вроде -1298383. Это нормально? Как я могу это исправить?

Спасибо.


person max_tech91    schedule 26.12.2016    source источник


Ответы (3)


Я не эксперт, но мне кажется, что вы получаете шестнадцатеричное значение. Возможно, вам нужно что-то более понятное, например значение каждого слоя RGB.

Чтобы распаковать пиксель в его значения RGB, вы должны сделать что-то вроде:

private short[][] red;
private short[][] green;
private short[][] blue;

 /** 
 * Map each intensity of an RGB colour into its respective colour channel
 */
private void unpackPixel(int pixel, int row, int col) {
    red[row][col] = (short) ((pixel >> 16) & 0xFF);
    green[row][col] = (short) ((pixel >> 8) & 0xFF);
    blue[row][col] = (short) ((pixel >> 0) & 0xFF);
}

А после изменений в каждом канале можно упаковать пиксель обратно.

/** 
 * Create an RGB colour pixel.
 */
private int packPixel(int red, int green, int blue) {
    return (red << 16) | (green << 8) | blue;
}

Извините, если это не то, что вы ищете.

person Eduardo    schedule 26.12.2016

Вы можете получить пиксель из представления следующим образом:

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);
person Naitik    schedule 26.12.2016

getPixel() возвращает цвет в указанном месте. Выдает исключение, если x или y выходят за пределы (отрицательное значение или >= ширины или высоты соответственно).

Возвращаемый цвет представляет собой неумноженное значение ARGB.

person ucMedia    schedule 26.12.2016