Как мне создать сглаживаемый BufferedImage с использованием J2ME (CDC / PP 1.1) - PullRequest
0 голосов
/ 06 августа 2009

У меня есть BufferedImage, созданный с использованием

new BufferedImage(wid,hgt,BufferedImage.TYPE_INT_ARGB);

, к которому я собираю обои, используя несколько других изображений. Он отлично работает в Jave SE, но когда я попытался запустить код на платформе J9 CDC / PP, я обнаружил, что у Personal Profile BufferedImage нет конструкторов!

Может ли кто-нибудь указать мне, как я могу создать изображение поддержки альфа-канала, используя CDC 1.0 и Личный профиль 1.1?


Редактировать: На данный момент я создал запасной код, который обрабатывает NoSuchMethodError (и др.), А затем просто создает изображение с GraphicsConfiguration.createCompatibleImage (int, int). Это может быть тем, что создает альфа-смешение изображений, но пройдет несколько недель, прежде чем я смогу конкретно проверить это из-за других приоритетов (тестирование на портативных устройствах не является моей прямой ответственностью, так что это вне моей компетенции руки).

Если я найду лучший ответ, я опубликую его как ответ на этот вопрос; в то же время, если кто-то еще побьет меня, будьте уверены, я приму ваш ответ, если он сработает, и ответ будет представлять интерес для меня в обозримом будущем (я ожидаю, что ответ через 2-5 лет все еще потребуется) .

1 Ответ

2 голосов
/ 13 февраля 2010

Класс 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 », в котором объясняется, «как изменить альфа-значение изображения, чтобы оно выглядело смешанным». "который по сути альфа-смешивания.

...