专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Java教程 » j2me开发精解:J2ME手机开发中的透明图片处理 »正文

j2me开发精解:J2ME手机开发中的透明图片处理

来源: 发布时间:星期四, 2009年2月12日 浏览:335次 评论:0


    在开发J2ME手机时候尤其是在开发游戏时候透明图片几乎是种必然需求但是在游戏开发中我们会采用Sprite精灵来做图形元素绘制而这些图片素材可能都是来自于资源中文件这些文件如果采用PNG等支持透明设置格式透明处理就会被精灵类自动实现不需要我们特别处理了如果遇到些特殊需求比如某些图片可能需要通过来绘制或者开发者希望用来绘制那么这时候自己绘制图片如何被透明地绘制在Canvas中呢?

    透明图片绘制在J2ME中不是通过Graphics思路方法完成而是通过将Image图片对象指定成透明图片对象来完成在Image中有个思路方法叫createRGBImage( rgb, width, height,boolean processAlpha)这个思路方法可以创建出幅具有透明和半透明效果图片当这样图片被绘制在屏幕上时候会自动表现为透明或半透明色但是这个思路方法产生图片有个问题就是这个图片中像素颜色是不可变也就是说这个对象getGraphics不能取得Graphics对象也就不能通过自定义绘制图片而我们所需要就是要通过来绘制图片并且达到半透明效果那么如何办呢?

    我们这样来处理首先我们通过ImagecreateImage思路方法来创建个可变图片然后绘制自定义图片数据内容举例如下:
w = 32;
h = 24;
//创建可变自定义图片指定宽度和高度
Image bufImg = Image.createImage(w, h);
Graphics g = bufImage.getGraphics;
g.Color(0xFFFFFF);
//使用白色绘制背景
g.fillRect(0, 0, w, h);
//绘制需要图片内容
g.Color(0xFF0000);
g.fillRect(10, 10, 20, 20);

//绘制图片完成现在需要取得图片中数据内容
//准备用来存放像素颜色
imgData = [w * h];
//取得像素颜色
bufImg.getRGB(imgData, 0, w * h, 0, 0, w, h);

上面完成了对自定义图片像素颜色提取在J2ME中Image是这样规定如果这是个不可变图片取得个像素颜色是类型如果其高位是00也就是颜色为0x00RRGGBB时候这个像素就是完全透明如果是0xAARRGGBB其中AA表示透明度这样颜色表示半透明现在我们取得了自定义可变图片像素颜色值接下来我们需要创建不可变图片并且要把白色背景设置为完全透明
//将取得保存在背景颜色高位值设置为00
for( i=0; i<imgData.length; i) {
(imgData[i] & 0x00FFFFFF 0x00FFFFFF) {
imgData[i] = imgData[i] & 0x00FFFFFF;
}
}

//创建不可变透明图片, 其中最后个参数表示透明
Image immutableImg = Image.createRGBImage(imgData, w, h, true);

好了到这里个透明图片创建出来了这个图片被绘制到Canvas上将会是幅背景完全透明图片其实这样我们可以对这个功能封装个思路方法代码如下:
createAlphaImage(Image img, alphaColor) {
w = img.getWidth;
h = img.getHeight;
imgData = [w * h];
img.getRGB(imgData, 0, w * h, 0, 0, w, h);
for( i=0; i<imgData.length; i) {
(imgData[i] & alphaColor alphaColor) {
imgData[i] = imgData[i] & alphaColor;
}
}
思路方法参数介绍说明如下:
img-是不透明原图片
alphaColor-是需要设为透明像素颜色格式为0x00RRGGBB

0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: