Re: How to Make an image transparent in J2ME ? J2ME generally deals with PNG images. These images can be made transparent or semitransparent by changing the alpha channel value of the image matrix accordingly.
The sample midlet code below shows a fade in and fade out effect.
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.*;
import java.io.*;
public class Fading extends javax.microedition.midlet.MIDlet
implements CommandListener{
private Command mExitCommand;
public void startApp() {
mExitCommand = new Command("Exit", Command.SCREEN, 0);
TheCanvas tc = new TheCanvas();
tc.addCommand(mExitCommand);
tc.setCommandListener(this);
Display d = Display.getDisplay(this);
d.setCurrent(tc);
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
public void commandAction(Command c, Displayable d){
notifyDestroyed();
}
}
class TheCanvas extends Canvas
implements Runnable{
private Image mJavaImage;
private Image mBgImage;
private Image mBufferImage;
private Graphics mGraphics;
private boolean mTrucking = true;
private boolean mUpdate = true;
private int mAlpha = 0;
private int mValue = 5;
private int[]rawInt;
private Runtime rt;
public TheCanvas(){
rt = Runtime.getRuntime();
mBufferImage = Image.createImage(getWidth(), getHeight());
mGraphics = mBufferImage.getGraphics();
try{
mJavaImage = Image.createImage("/java.png");
mBgImage = Image.createImage("/bg.png");
}catch(Exception e){}
rawInt = new int[mJavaImage.getWidth() * mJavaImage.getHeight()];
mJavaImage.getRGB(rawInt, 0, mJavaImage.getWidth(), 0, 0, mJavaImage.getWidth(), mJavaImage.getHeight());
Thread t = new Thread(this);
t.start();
}
public void paint(Graphics g){
g.drawImage(mBufferImage, 0, 0, 0);
g.drawString("freeMemory=" + String.valueOf(rt.freeMemory()), 0, 100, 0);
mUpdate = true;
}
public void run() {
while(mTrucking){
if(mUpdate){
mAlpha+= mValue;
if(mAlpha>=255)
mValue = mValue *-1;
else if(mAlpha<=0)
mValue = mValue *-1;
ImageEffect.blend(rawInt, mAlpha);
Image fadingImage = Image.createRGBImage(rawInt, mJavaImage.getWidth(), mJavaImage.getHeight(), true);
mGraphics.setColor(0xFFFFFF);
mGraphics.fillRect(0, 0, getWidth(), getHeight());
mGraphics.drawImage(mBgImage, 0, 0, 0);
mGraphics.drawImage(fadingImage, 0, 10, 0);
System.gc();
mUpdate = false;
}
repaint();
}
}
}
class ImageEffect{
public static void blend(int[] raw, int alphaValue, int maskColor, int dontmaskColor){
int len = raw.length;
for(int i=0; i<len; i++){
int a = 0;
int color = (raw[i] & 0x00FFFFFF);
if(maskColor==color){
a = 0;
}else if(dontmaskColor==color){
a = 255;
}else if(alphaValue>0){
a = alphaValue;
}
a = (a<<24);
color += a;
raw[i] = color;
}
}
public static void blend(int[] raw, int alphaValue){
blend(raw, alphaValue, 0xFFFFFFFF, 0xFFFFFFFF);
}
} |