Как мне создать сглаживаемый BufferedImage с использованием J2ME (CDC/PP 1.1)
У меня есть BufferedImage, созданный с помощью
new BufferedImage(wid,hgt,BufferedImage.TYPE_INT_ARGB);
к которому я собираю обои, используя несколько других изображений. Он отлично работает в Jave SE, но когда я попытался запустить код на платформе J9 CDC/PP, я обнаружил, что у Personal Profile BufferedImage нет конструкторов!
Может кто-нибудь указать мне, как я могу создать изображение поддержки альфа-канала, используя CDC 1.0 и Personal Profile 1.1?
Редактировать: сейчас я создал запасной код, который обрабатывает NoSuchMethodError (и др.), А затем просто создает изображение с GraphicsConfiguration.createCompatibleImage(int,int). Возможно, это создает альфа-смешение изображений, но пройдет несколько недель, прежде чем я смогу конкретно проверить это из-за других приоритетов (тестирование на портативных устройствах не является моей прямой ответственностью, поэтому это не в моих руках).
Если я найду лучший ответ, я опубликую его как ответ на этот вопрос; в то же время, если кто-то еще победит меня, будьте уверены, я приму ваш ответ, если он сработает, и ответ будет представлять интерес для меня в обозримом будущем (я ожидаю, что ответ через 2-5 лет все еще потребуется),
1 ответ
Класс Image (javax.microedition.lcdui.Image) содержит метод getRGB(...), который анализирует изображение в массив значений RGB+Alpha для каждого пикселя изображения. Когда у вас есть изображение в этом формате, вы можете легко настроить альфа-значения, чтобы повысить их прозрачность, прежде чем наносить слой на изображение. Это действительно единственный динамический способ редактировать прозрачность изображения в J2ME.
чтобы получить значение альфа (прозрачности) из массива rgba, вы должны использовать сдвиг битов следующим образом:
int origAlpha = (rgba[j] >> 24);
и затем, чтобы изменить значение альфа (прозрачности) на что-то другое (без изменения цвета в этом пикселе), вы можете использовать сдвиг битов, чтобы вставить другой уровень прозрачности.
int newAlpha = 0x33; // or use whatever 0-255 value you want, with 255=opaque, 0=transparent
rgba[j] = (rgba[j] & 0x00ffffff);
rgba[j] = (rgba[j] | (newAlpha << 24));
Затем в Image создается метод createImage (...), который принимает в качестве параметра байтовый массив данных изображения, который можно использовать для создания нового изображения из вашего измененного массива данных пикселей.
Также полезно, что веб-сайт SonyEricsson для разработчиков также содержит учебное пособие с примером кода под названием " Выводить и выводить изображения в MIDP 2.0", в котором объясняется, "как изменить альфа-значение изображения, чтобы оно выглядело смешанным", что по сути является альфа-смешиванием.