Как да четем цвета на пикселите в 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
@JürgenK. След като бъде заредено от Java API, да, всяко изображение трябва да има стойност за прозрачност. Ако изображението е заредено от файлов формат, който не поддържа прозрачност (напр. JPEG), стойността на прозрачност за всеки пиксел ще бъде зададена на 0xff (100% непрозрачност). - person jarnbjo; 05.11.2015
comment
Благодаря за вашият отговор. Имах надеждата да изчисля някаква мъгла в снимки с мъгла, използвайки прозрачност. Грешен избор, предполагам - person Jürgen K.; 05.11.2015