Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java ME (J2ME) > Полупрозрачный пиксель


Автор: Взюх 9.8.2007, 10:07
Как задать рисуемому пикселю белый цвет и где-то 50% прозрачности? 

Автор: SatanClaus 9.8.2007, 10:37
Посмотри пост "Затемнение изображения". Там много полезного на эту тему валяется...  smile 

Автор: Взюх 9.8.2007, 21:29
SatanClaus, 
Перечитал ……цать раз, я так понял что  первые два числа после 0х..  и задают уровень прозрачности пикселя, но у меня не получается,  заполненный прямоугольник, который я рисую  все равно не прозрачный. 

Автор: GhostMasterNet 10.8.2007, 10:02
Должно работать. Может быть ты ошибся при установке нужных пикселей?

попробуй так:

Код


ARGB_image[ i ] = ARGB_image[ i ] & (0x00FFFFFF | (transValue << 24));



где  0 < transValue < 255,  ARGB_image - RGB-массив твоей картинки


Методами fillXXX, drawXXX ( fillRect, например) рисовать прозрачные пиксели не получается.
Но можно использовать drawRGB.
    
Код


//В этом примере рисуется одинокий полупрозрачный белый пиксель...

int[] rgbData = {0x88FFFFFF};
g.drawRGB(rgbData, 0, 1, i, j, 1, 1, true);


                

Автор: SatanClaus 10.8.2007, 10:24
Попробуй что-то вроде этого:
Код

Image image1 = Image.createImage("image.png");
int h = image1.getHeight();
int w = image1.getWidth();
int[] rgb = new int[w*h];
image1.getRGB(rgb,0,w,0,0,w,h);
for (int x = 0; x < w; x++) {
  for(int y = 0; y < h; y++) {
    int pixel = rgb[x+y*w];
    pixel = (pixel >> 1) & 0xFF;
    rgb[x+y*w] = pixel; 
  }
}
Image image2 = Image.createRGBImage(rgb, w, h, false);

При этом 0xFF - это маска, которая применяется для того чтобы не изменялись цвета RGB, а изменялась лишь ALPHA, ну и собственно pixel >> 1 (сдвиг вправо, если увеличиваешь ALPHA),
pixel << 1 (если уменьшаешь)...
Мне эта схема конечно же не подошла, я разбивал пиксель на компоненты R,G,B & Alpha. Потом изменял Alpha и снова собирал пиксель. Но мое затемнение так тупило (при том, что тестил я на SE K700), что мне пришлось отказаться от этой идеи. Тем более не все телефоны с MIDP2 будут правильно работать. А про MIDP1 вообще забудь.

Добавлено через 57 секунд
Image image1 = Image.createImage("/image.png"); Слэш забыл поставить...  smile 

Автор: Взюх 10.8.2007, 17:25
GhostMasterNet, 

int[] rgbData = {0xffFFFFFF};
g.drawRGB(rgbData, 0, 1, 30, 30, 1, 1, true);

рисует белым

int[] rgbData = {0x00FFFFFF};
g.drawRGB(rgbData, 0, 1, 30, 30, 1, 1, true);

судя по всему, там совсем все прозрачно (ничего нету) 



Мне тут подсказали, что прозрачным на 50% прямоугольник я средствами Явы не нарисую.
Надо искать другие способы. 

Автор: dorogoyIV 11.8.2007, 16:29
Цитата(Взюх @  10.8.2007,  17:25 Найти цитируемый пост)
Мне тут подсказали, что прозрачным на 50% прямоугольник я средствами Явы не нарисую.

тебе неправильно подсказали. 

Автор: darf 14.8.2007, 12:41
Должны были подсказать: средствами MIDP1 не нарисуешь, а если в MIDP2, то запросто.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)