Как прочитать оригинальный альфа-канал из PNG в J2ME? - PullRequest
1 голос
/ 11 мая 2011

Я пишу простую игру J2ME, в которой используются изображения PNG с 8-битным альфа-каналом. Проблема: не все оборудование поддерживает полную прозрачность рендеринга. Однако, поскольку моя игра по своей природе довольно статична (вначале «спрайты» размещаются на фоновом изображении, исходя из текущего размера экрана, и это все), я подумал, что было бы возможно предварительно отобразить эти прозрачные изображения непосредственно на фон во время инициализации игры и использовать его позже в игре. Я не могу представить их в Фотошопе, так как их позиции заранее неизвестны.

Но, похоже, нет способа прочитать оригинальный альфа-канал на устройствах, которые не поддерживают полупрозрачность, так как он пересэмплируется во время загрузки PNG. Есть ли какая-нибудь библиотека, которая может помочь с этим? Или целесообразно хранить альфа-каналы отдельно (например, как отдельные 8-битные изображения PNG) и применять их вручную?

Спасибо!

Ответы [ 2 ]

1 голос
/ 11 мая 2011

PNG Изображения также имеют поддержку прозрачности, если вы хотите создать прозрачное изображение, то вы прочитали RGB-данные вместе с альфа-каналами и обработали альфа

Image transPNG=Image.createImage("/trans.png");  //load the tranparent image
int rgbData[];
transPNG.getRGB(rgbData, 0,transPNG.getWidth(), 0, 0,transPNG.getWidth(), transPNG.getHeight());
Image tranparentImage=Image.createRGBImage(rgbData, width, height, true); //process alpha
transPNG=null;

Выше код показывает, как создать прозрачное изображение и использовать.

0 голосов
/ 11 мая 2012

Не могу обещать, что это поможет, но вы можете попробовать этот способ чтения альфа-канала, используя стандартные методы из утилиты Java.

BufferedImage image = ImageIO.read(new File(name));

int[] alpha = new int[1]; //containg alpha-value for one pixel.
image.getAlphaRaster().getPixel(x, y, alpha);

System.out.println(alpha[0]); //gives the alpha value for x,y 
...