У меня сейчас проблема с альфа-каналами при чтении файлов PNG с ImageIO.read(...)
fileInputStream = new FileInputStream(path);
BufferedImage image = ImageIO.read(fileInputStream);
//Just copying data into an integer array
int[] pixels = new int[image.getWidth() * image.getHeight()];
image.getRGB(0, 0, width, height, pixels, 0, width);
Однако, при попытке прочитать значения из массива пикселей путем сдвига битов, как показано ниже, альфаканал всегда возвращает -1
int a = (pixels[i] & 0xff000000) >> 24;
int r = (pixels[i] & 0xff0000) >> 16;
int g = (pixels[i] & 0xff00) >> 8;
int b = (pixels[i] & 0xff);
//a = -1, the other channels are fine
При поиске в Google проблемы я понимаю, что для определения альфа-канала необходимо определить тип BufferedImage
, как показано ниже:
BufferedImage image = new BufferedImage(width, height BufferedImage.TYPE_INT_ARGB);
Но ImageIO.read(...)
возвращает BufferedImage
без предоставления возможности указать тип изображения.Так как я могу это сделать?Любая помощь очень ценится.
Заранее спасибо