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


Автор: DEMOVERSION 15.3.2006, 18:41
У меня есть Image. Как его можно зарисовать прозрачным серым цветом. Надо зделать еффект неактивного Image-a???
Спасибо

Автор: Nemesis 15.3.2006, 23:28
А пишется под MIDP 2.0?

Автор: DEMOVERSION 16.3.2006, 11:52
да, MIDP 2.0

Автор: Nemesis 16.3.2006, 16:58
Тогда могу посоветовать взять массив цветов image`а getRGB(...). Затем в этом массиве просто немножко изменить значение цветов. Скажем затемнение - это просто уменьшение значения цвета каждой компоненты, а скажем полупрозрачность сероватую можно сделать заменяя в массиве значение цвета пикселя на серый через 1 пиксель (серый - истинный - серый - истинный...)

А потом создать изображение из модифицированного массива.

Автор: DEMOVERSION 16.3.2006, 18:21
Так нормально?

Код

import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
/*
 * testRGBCanvas.java
 *
 * Created on March 16, 2006, 2:29 PM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

/**
 *
 * @author ihor.kasyanchuk
 */
public class testRGBCanvas extends GameCanvas{
    
    /** Creates a new instance of testRGBCanvas */
    
    private Image image;
            
    public testRGBCanvas() {
        super(false);
        setFullScreenMode(true);
        try {
             image = Image.createImage("/one.png");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public static Image getInactiveImage(Image image)  {
             int rgbData[] = new int[image.getHeight()*image.getWidth()];
             image.getRGB(rgbData,0,image.getWidth(),0,0,image.getWidth(),image.getHeight());
             for (int i = 0; i < rgbData.length; i++) {
                 rgbData[i] = rgbData[i] & 0x77FFFFFF;
             }
             return Image.createRGBImage(rgbData,image.getWidth(),image.getHeight(),true);
    }
    
    public void paint(Graphics g) {
        g.drawImage(image,10,10,Graphics.LEFT|Graphics.TOP);
        g.drawImage(getInactiveImage(image),60,60,Graphics.LEFT|Graphics.TOP);
    }   

}


Автор: Nemesis 16.3.2006, 22:14
Да, вполне рабочий должен быть. Только я не уверен по поводу такой полупрозрачности - 77. По идее на всех мобилках должно работать правильно. Но на крайняк можно будет просто сделать каждый 2ой пиксель серым:

Код


for (int i = 0; i < rgbData.length; i+=2) {    
                 rgbData[i] = 0x808080;    
             }


Автор: javastic 17.3.2006, 11:49
Можно сделать спрайты: активный (цветной), пассивный (монохромный). Для примера. smile

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