Wednesday, October 7, 2009

Transpanet Image in J2ME

private static class TransparentImage{
public static Image makeBlend(Image img, int transparent){
int [] rawInt = new int[img.getWidth() * img.getHeight()];
img.getRGB(rawInt, 0, img.getWidth(), 0, 0, img.getWidth(), img.getHeight());
blend(rawInt, transparent);
return Image.createRGBImage(rawInt, img.getWidth(), img.getHeight(), true);
}

public static void blend(int[] raw, int alphaValue, int maskColor, int dontmaskColor){
int len = raw.length;

for(int i=0; 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);
}
}

}

J2ME Gradient Box

import javax.microedition.lcdui.Graphics;

public class Gradient {

public static final int VERTICAL = 0;
public static final int HORIZONTAL = 1;

public static void gradientBox(Graphics g, int color1, int color2, int left, int top, int width, int height, int orientation)
{
int max = orientation == VERTICAL ? height : width;

for(int i = 0; i < max; i++)
{
int color = midColor(color1, color2, max * (max - 1 - i) / (max - 1), max);

g.setColor(color);

if(orientation == VERTICAL)
g.drawLine(left, top + i, left + width - 1, top + i);
else
g.drawLine(left + i, top, left + i, top + height - 1);
}
}

static int midColor(int color1, int color2, int prop, int max)
{
int red =
(((color1 >> 16) & 0xff) * prop +
((color2 >> 16) & 0xff) * (max - prop)) / max;

int green =
(((color1 >> 8) & 0xff) * prop +
((color2 >> 8) & 0xff) * (max - prop)) / max;

int blue =
(((color1 >> 0) & 0xff) * prop +
((color2 >> 0) & 0xff) * (max - prop)) / max;

int color = red << 16 | green << 8 | blue;

return color;
}
}