如果需要半透明可以先在image上画,然后把这个Image弄成半透明的。最后将Image绘到Canvas上就OK了”。
public static Image CreateAlphaImage(int Alphalike 0x88000000,Image src) {
int w,h;
w=src.getWidth();
h=src.getHeight();
int len=wh;
int srcRgb[]=new int[len];
int dscRgb[]=new int[len];
try{
src.getRGB(srcRgb,0,w,0,0,w,h);
}
catch(Exception ex){
ex.printStackTrace();
}
for (int i = 0; i len; i++) {
dscRgb[i] = srcRgb[i]+Alpha;
}
Image result=Image.createRGBImage(dscRgb,w,h,true);
return result;
}
int srcRgb[],dscRgb[]的格式是0xAARRGGBB。最高位是alpha值
如果你要使图片alpha 需要先调用
getRGB
public void getRGB(int[] rgbData,
int offset,
int scanlength,
int x,
int y,
int width,
int height)
然后对 rgbData 进行处理 填写高位 的alpha值
最后用createRGBImage创建你需要的位图。
以上只是适用于整幅透明图的透明度处处相同的情况。
如果需要图画上面的alpa值不同,可以将 dscRgb[i] = srcRgb[i]+Alpha;改成 dscRgb[i] = srcRgb[i]+Alpha[i];
Alpha[i]保存了alpa信息。
一些限制和值得
xueyong1203(二当家的) :"半透明这个问题,请教过一些开发人员
普遍的观点是程序中不易大量使用半透明效果
由于手机CPU在处理半透明效果时要对Alpha值进行变换等操作
所以比较占用CPU时间,也就会使fps掉得很厉害
而且有时还会出现一些莫名其妙的问题
所以商业游戏上很少有大量使用半透明的,虽然都知道这个效果好
对于MIDP 2.0的手机,不一定都支持半透明效果的
Alpha Processing时取决于机型Display.numAlphaLevels()方法的值
如果该值为2那就只能支持全透明或者不透明."
whycloud(云木):"如果知道指定设备可以支持透明,最好还是由美工制作,可以减小系统开销。另外在Mirco3D中可以设置半透明效果,但是也只是几个层次,并不是A操作
在JSR-184中可以通过帖图设置A通道,但是没试过,感觉上应该会很慢."