j2me 半透明Image

来源:互联网 发布:风险矩阵分析法 r=lxs 编辑:程序博客网 时间:2024/05/16 12:58

如果需要半透明可以先在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通道,但是没试过,感觉上应该会很慢."

 

原创粉丝点击