2016-12-26 2 views
4

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

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

Спасибо.

ответ

0

Я не эксперт, но для меня похоже, что вы получаете шестнадцатеричное значение. Возможно, вам нужно что-то большее понятно как значение каждого слоя 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; 
} 

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

0

Вы можете получить пиксель с точки зрения, как это:

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

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

Возвращаемый цвет non-premultiplied ARGB значение.

Смежные вопросы