浏览 3973 次
锁定老帖子 主题:j2me:图片透明化处理
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-01-24
MIDP2.0中,Graphics类中有drawRGB方法,用该方法可以将指定的区域设为特定的颜色数据。这个方法的声明如下: void drawRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height, boolean processAlpha); 参数的意义分别为: rgbData: 图片的数据 offset:第一个像素数据的索引 scanlength: 扫描行的宽度,即要写的数据的宽度,这个值一般与后面的width相同 x: 表示区域开始的x坐标 y: 表示区域开始的y坐标 width:这个区域的宽度 height: 这个区域的高度 修改了数组中int类型数据的Alpha通道的值,也就修改了图片的透明度。如下: 1.取得的每一个像素颜色是一个int类型的值 2.将每个像素的透明度修改为完全透明 for (int i = 0; i < rgbData.length; i++) { if(imgData[i] & 0x00FFFFFF == 0x00FFFFFF) { rgbData[i] = rgbData[i] & 0x00FFFFFF; } } 介于00-ff之间,则为半透明. 完整代码如下: class MyCanvas extends Canvas { protected void paint(Graphics g) { try { g.setColor(0xffffff); g.fillRect(0, 0, getWidth(), getHeight()); Image image = Image.createImage("/form_bg2.png"); image =createAlphaImage(image,0xffffffff); g.drawImage(image, 0, 0, 0); } catch (Exception ex) { System.out.println(ex.toString()); } } //图片设为透明 private static Image createAlphaImage(Image img, int alphaColor) { int w = img.getWidth(); int h = img.getHeight(); int[] imgData = new int[w * h]; int a=254; img.getRGB(imgData, 0, w , 0, 0, w, h); for (int i = 0; i < imgData.length; i++) { if ((imgData[i] & alphaColor) == alphaColor) { imgData[i] = (a<<24 )| (imgData[i] & alphaColor); } } Image immutableImg = Image.createRGBImage(imgData, w, h, true); return immutableImg; } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-01-26
gameloft就很喜欢用
Image.createRGBImage(); 方法 |
|
返回顶楼 | |
发表时间:2010-05-28
imgData[i] = (a<<24 )| (imgData[i] & alphaColor);
小弟问下 这干什么用的 |
|
返回顶楼 | |
发表时间:2010-06-02
你确定这个算法imgData[i] = (a<<24 )| (imgData[i] & alphaColor); 正确?
我怎么不可以? 应该是imgData[i] =0x00000000吧,这样才是透明 |
|
返回顶楼 | |