Как прочитать цвет пикселя в java BufferedImage с прозрачностью

Я читаю цвет пикселя в BufferedImage следующим образом:

.....
InputStream is = new BufferedInputStream(conn.getInputStream());
BufferedImage image = ImageIO.read(is);

int color = image.getRGB(x, y);

int  red = (colour & 0x00ff0000) >> 16;
int  green = (colour & 0x0000ff00) >> 8;
int  blue = colour & 0x000000ff;

Теперь это работает нормально, за исключением png с прозрачностью. Я обнаружил, что если x, y относятся к прозрачному пикселю без цвета, я все равно читаю цвет, как правило, тот же цвет, который используется в другом месте изображения.

Как определить, что пиксель на самом деле прозрачен и не окрашен?

Спасибо


person Richard H    schedule 21.10.2009    source источник


Ответы (1)


int alpha = (colour>>24) & 0xff;

Результатом также является значение в диапазоне от 0 (полностью прозрачный) до 255 (полностью непрозрачный).

person jarnbjo    schedule 21.10.2009
comment
Имейте в виду, что если альфа равна 0 (прозрачный), то значения цвета не имеют большого значения. Вероятно, это шаг оптимизации в некоторых редакторах, чтобы не заморачиваться установкой значений цвета, когда альфа равна 0. - person basszero; 21.10.2009
comment
спасибо - я удивлен, что в классе BufferedImage нет метода int getTransparency(int x, int y); - person greenimpala; 22.06.2011
comment
Каждое изображение содержит значение прозрачности? - person Jürgen K.; 05.11.2015
comment
@ЮргенК. Да, после загрузки Java API каждое изображение должно иметь значение прозрачности. Если изображение было загружено из файла формата, не поддерживающего прозрачность (например, JPEG), значение прозрачности для каждого пикселя будет установлено на 0xff (100% непрозрачность). - person jarnbjo; 05.11.2015
comment
Спасибо за Ваш ответ. У меня была надежда вычислить какую-то мутность на картинках с туманом, используя прозрачность. Неправильный выбор, я думаю - person Jürgen K.; 05.11.2015