▼MIDP2.0メモ▼
半透明イメージを描画する


半透明イメージを描画するプログラムを作成する。S!アプリでは塗り潰しは可能だが半透明は総じてダメみたい。回避作にはピクセルによる描画、3Dエンジンの利用、ImageUtilの利用(明暗を付けて半透明風に)、半透明加工した画像の利用などがあるか、処理速度と効果の観点からみてイマイチ。



画像の準備

そらみ
-sorami.png
-48x48


プログラム
AlphaEx.java
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;

//半透明イメージの描画(本体)
public class AlphaEx extends MIDlet {
    static AlphaCanvas c;//キャンバス

    //コンストラクタ
    public AlphaEx() {
        c=new AlphaCanvas();
        Display.getDisplay(this).setCurrent(c);
    }

    //アプリの開始
    public void startApp() {
    }

    //アプリの一時停止
    public void pauseApp() {
    }

    //アプリの終了
    public void destroyApp(boolean flag) {
    }
}


AlphaCanvas.java
import javax.microedition.lcdui.*;

//半透明イメージの描画(キャンバス)
public class AlphaCanvas extends Canvas {
    Image image0=null;//イメージ
    Image image1=null;//イメージ
    Image image2=null;//イメージ
    Image image3=null;//イメージ

    //コンストラクタ
    AlphaCanvas() {
        //画像ファイルの読み込み
        try {
            image0=Image.createImage("/sorami.png");
            image1=createAlphaImage(image0,150);
            image2=createAlphaImage(48,48,0xFF0000,150);
            image3=createColorImage(image0,0xFF0000);
        } catch (Exception e) {
            System.out.println(e.getClass().getName());
        }
    }

    //半透明イメージの生成
    Image createAlphaImage(int width,int height,int color,int trans) {
        int[] rgb=new int[width*height];
        for (int i=0;i<rgb.length;i++) {
            rgb[i]=(color&0xFFFFFF)|(trans<<24);
        }
        return Image.createRGBImage(rgb,width,height,true);
    } 

    //半透明イメージの生成
    Image createAlphaImage(Image image,int trans) {
        int width =image.getWidth();
        int height=image.getHeight();
        int[] rgb=new int[width*height];
        image.getRGB(rgb,0,width,0,0,width,height);
        for (int i=0;i<rgb.length;i++) {
            rgb[i]=(rgb[i]&0xFFFFFF)|(trans<<24);
        }
        return Image.createRGBImage(rgb,width,height,true);
    }


    //色変更イメージの生成
    Image createColorImage(Image image,int color) {
        int width =image.getWidth();
        int height=image.getHeight();
        int[] rgb=new int[width*height];
        image.getRGB(rgb,0,width,0,0,width,height);
        for (int i=0;i<rgb.length;i++) {
            if ((rgb[i]&0xFF000000)!=0) rgb[i]=0xFF000000|color;
        }
        return Image.createRGBImage(rgb,width,height,true);
    }

    //描画
    public void paint(Graphics g) {
        //画面の塗り潰し
        g.setColor(255,255,255);
        g.fillRect(0,0,getWidth(),getHeight());

        //イメージの描画
        g.drawImage(image0, 0, 0,g.LEFT|g.TOP);

        //半透明イメージの描画
        g.drawImage(image1,20,20,g.LEFT|g.TOP);
        g.drawImage(image1,40,40,g.LEFT|g.TOP);
        g.drawImage(image1,60,60,g.LEFT|g.TOP);

        //半透明矩形の描画
        g.drawImage(image2, 0, 50,g.LEFT|g.TOP);
        g.drawImage(image2,20, 70,g.LEFT|g.TOP);
        g.drawImage(image2,40, 90,g.LEFT|g.TOP);
        g.drawImage(image2,60,110,g.LEFT|g.TOP);

        //塗り潰しイメージの描画
        g.drawImage(image3, 0, 120,g.LEFT|g.TOP);
    }
}


S!アプリ(3GC型)のJADファイル
AlphaEx.jad
MIDlet-1: AlphaEx, , AlphaEx
MIDlet-Jar-Size: 2782
MIDlet-Jar-URL: AlphaEx.jar
MIDlet-Name: AlphaEx
MIDlet-Vendor: My Vendor
MIDlet-Version: 1.0
MicroEdition-Profile: MIDP-2.0
MicroEdition-Configuration: CLDC-1.1



−戻る−