2009-08-05 3 views
0

У меня есть BufferedImage создана приКак я создаю альфасмешивание BufferedImage с помощью J2ME (CDC/PP 1.1)

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

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

Может кто-нибудь мне точку, как я могу построить альфа-канал, поддерживающий изображение, используя CDC 1,0 и личного профиля 1.1?


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

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

ответ

2

Класс изображения (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)); 

Тогда существует метод createImage (...) в изображениях, которая принимает байты-массив данных изображения в качестве параметра, которые могут быть использованы для создания нового образа из измененного массива данных пикселя.

Также полезно, что на веб-сайте разработчика SonyEricsson также есть учебник с образцом кода «Fade in and out images in MIDP 2.0», в котором объясняется «как изменить альфа-значение изображения, чтобы оно выглядело смешанным», которое по существу является альфа-смешиванием.

+0

Это дает мне представление; Я могу попытаться создать изображение из массива int с каждым значением 0xFF000000. Мне нужно изображение, в котором каждый пиксель изначально прозрачен, потому что я мог бы рисовать только внешние грани, и в этом случае мне нужно, чтобы остальные отображали текущее содержимое графики, когда изображение окончательно окрашено в контекст графики. –

+0

Извините, мой вопрос был специально для личного профиля (добро пожаловать в адский J2ME API). Мне нужен java.awt.Image. –

 Смежные вопросы

  • Нет связанных вопросов^_^