在项目里面经常都会遇到图片透明色或者透明度的处理。
常常会有些概念混淆不清楚,主要是对于创建图片的几个方法。整理了一些资料在这里,个人觉得比较有用:
透明图片的绘制在J2ME中不是通过Graphics的方法调用完成的,而是通过将Image图片对象指定成透明图片对象来完成的。在Image中有一个方法叫createRGBImage(int[] rgb,int width,int height,boolean processAlpha)。这个方法可以创建出一幅具有透明和半透明效果的图片,当这样的图片被绘制在屏幕上的时候,会自动表现为透明或半透明色。但是这个方法产生的图片有一个问题,就是这个图片中的像素颜色是不可变的,也就是说这个对象的getGraphics()不能取得Graphics对象,也就不能通过程序自定义绘制图片。而我们所需要的就是要通过程序来绘制图片并且达到半透明效果。那么怎么办呢?
我们这样来处理,首先我们通过Image的createImage方法来创建一个可变图片,然后绘制自定义的图片数据内容。示例程序如下:
上面程序完成了对自定义图片的像素颜色的提取,在J2ME中的Image是这样规定的,如果这是一个不可变图片,取得的每一个像素颜色是一个int类型的值,如果其高位是00,也就是颜色为0x00RRGGBB的时候,这个像素就是完全透明的,如果是0xAARRGGBB,其中AA表示透明度,这样的颜色表示半透明,现在我们取得了自定义的可变图片的像素颜色值,接下来,我们需要创建不可变图片,并且要把白色的背景设置为完全透明的。
好了,到这里一个透明图片创建出来了,这个图片被绘制到Canvas上将会是一幅背景完全透明的图片。其实这样我们可以对这个功能封装一个方法,代码如下:
更完备的方法: