`
mfcai
  • 浏览: 407633 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

j2me:图片透明化处理

阅读更多
在MIDP2.0的图片编程中,可以把图片理解为一个int[]数组,数组中的每个数据都与图片中的一个像素对应。数组中的int类型的数据被分为4个部分,每个部分由8bit字节构成,分别代表Alpha通道,red通道,green通道,blue通道。其中,rgb代表图片颜色的组成,A代表图片的透明度。1111 1111代表像素完全不透明,0000 0000代表像素完全透明,介于两者之间的则代表半透明像素。

   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;
 }

}
分享到:
评论
3 楼 gundumw100 2010-06-02  
你确定这个算法imgData[i] = (a<<24 )| (imgData[i] & alphaColor);  正确?
我怎么不可以?
应该是imgData[i] =0x00000000吧,这样才是透明
2 楼 Java1008 2010-05-28  
imgData[i] = (a<<24 )| (imgData[i] & alphaColor); 


小弟问下 这干什么用的
1 楼 鸟哥哥 2010-01-26  
gameloft就很喜欢用
Image.createRGBImage();  方法

相关推荐

    图片分类 J2ME中的图片处理

    【标题】:“图片分类 J2ME中的图片处理” 【描述】:“图片的特点及分类;png图片的格式分析;图片在J2me中的应用。” 【标签】:“图片处理” “J2ME” “png” 在Java的移动开发领域,J2ME(Java 2 Micro ...

    j2me 的关于图片的处理 源码(缩放,裁剪,调整大小,镜像,对比度亮度调整,黑白,线条,粉笔画)

    在Java 2 Micro Edition (J2ME) 中,图片处理是一项关键任务,特别是在开发移动设备上的应用程序时。本文将深入探讨如何使用J2ME进行图片处理,包括缩放、裁剪、调整大小、镜像翻转、对比度和亮度调整、黑白效果、...

    j2me游戏素材(图片合集)

    1. 图片格式:J2ME支持GIF、PNG和WBMP等格式,但PNG因其优秀的透明度支持和较小的文件大小,常被优先选用。 2. 图片优化:由于J2ME设备的内存和处理能力有限,开发者需要对图片进行压缩和尺寸调整,以减少内存占用并...

    java j2me上的图片抖动效果 特效

    Java J2ME(Java 2 Micro Edition)是Java平台的一个子集,主要用于移动设备和嵌入式...这个过程涉及到图片的加载、位置的计算以及屏幕的更新等多个环节,对于理解和掌握J2ME的图形绘制和动画处理有重要的实践意义。

    J2ME知识点汇集,J2ME考试专用

    J2ME包含了Java核心类库的一部分,并为这些设备提供了定制化的运行环境。以下是一些重要的J2ME知识点: 1. **线程管理**:线程在J2ME中用于实现并发执行任务。线程的状态包括新建、可运行(Runnable)、运行、阻塞...

    J2ME开发网提供的PNG素材打包下载

    在J2ME开发中,处理PNG素材需要了解如何有效地进行资源加载、解码和绘制。使用如MIDP(Mobile Information Device Profile)和CLDC(Connected Limited Device Configuration)这样的J2ME框架,开发者可以创建自定义...

    J2ME小游戏 蜀山

    学习这个游戏的源码,你可以深入理解J2ME的游戏开发流程,包括如何组织游戏架构,如何处理图形和音频,以及如何实现基本的游戏交互。这对于想要涉足移动游戏开发的程序员来说,是一个极好的实践案例。同时,对于想...

    J2ME优化压缩PNG文件.zip

    2. **J2ME的图像处理**:J2ME中的` javax.microedition.lcdui.Graphics`类提供了一些基本的图像绘制和处理功能,但并不直接支持PNG解码。因此,开发者需要使用第三方库,如TinyPNG或libpng的轻量化版本,来实现PNG...

    基于Java的源码-J2ME优化压缩PNG文件.zip

    9. **API设计**:可能提供了一个用户友好的API,使得其他开发者可以方便地集成到自己的J2ME应用中,压缩和解压缩PNG图片。 10. **代码组织**:良好的代码结构和注释可以帮助其他开发者理解和维护这段代码,提高代码...

    基于Java的J2ME优化压缩PNG文件.zip

    在Java的J2ME(Java Micro Edition)平台上,由于资源有限,优化图像文件变得尤为重要,尤其是对于PNG(Portable Network Graphics)这种无损压缩格式的图片。PNG格式因其透明度支持和高质量而被广泛用于移动应用,...

    基于J2ME的手机游戏的优化及开发技巧

    - **图片格式优化**:选择合适的图片格式,如JPEG用于背景图像,PNG用于透明度高的图像,以最小化文件大小同时保持图像质量。 #### 三、结论:持续优化,提升用户体验 综上所述,基于J2ME的手机游戏开发中,优化...

    在移动设备上用J2ME实现动画.pdf

    - 使用图像处理软件(如Photoshop或Fireworks)创建一系列相同大小的图片作为动画帧。 - 图片应保存为PNG格式,因为这是MIDP唯一支持的图片格式。 - 图片可以存储在Web服务器上供MIDlet下载,也可以直接嵌入到MIDlet...

    j2me游戏开发精灵及贴图

    创建精灵时,我们需要加载图片资源,并将其转换为适合J2ME环境的格式,例如使用PNG8格式以减少内存占用。 贴图则是由多个小图像拼接而成的大图像,通常用于构建游戏背景或复杂的场景。在J2ME中,TiledLayer是一个...

    在J2ME程序中制作Splash画面效果.zip

    总结,制作J2ME程序中的Splash屏幕涉及图形设计、计时逻辑和用户输入处理等多方面知识,而C#提供了另一种平台,如Xamarin,来实现类似的功能,但适应不同的开发环境。了解这些技术可以帮助开发者提升移动应用的用户...

    J2ME游戏开发部分武器PNG图

    本资源"J2ME游戏开发部分武器PNG图"显然是一系列用于J2ME游戏开发的图像资源,主要包含不同类型的武器图片。PNG(Portable Network Graphics)是一种无损压缩的位图格式,广泛用于网页和软件开发,因为它支持透明度...

    Java J2me手机炸弹人游戏代码.rar

    Java J2ME(Java Micro Edition)是Java技术的一个分支,主要应用于移动设备、嵌入式系统等资源有限的平台,用于开发和运行应用程序。在这个"Java J2me手机炸弹人游戏代码"压缩包中,我们可以深入理解如何用Java语言...

    计算机软件-编程源码-J2ME的俄罗斯方块.zip

    【标题】"计算机软件-编程源码-J2ME的...此外,源码还可能展示了错误处理和调试技巧,以及如何将J2ME应用打包成可部署的JAR文件。对于想要学习移动游戏开发或者对J2ME感兴趣的开发者来说,这是一个宝贵的教育资源。

    计算器图片压缩文件计算器皮肤

    总之,"计算器图片压缩文件计算器皮肤"涉及到的IT知识点涵盖了图片资源的压缩、编程图片的使用、以及如何在J2ME和C++中处理图像。理解并熟练掌握这些技能对于开发美观且功能丰富的计算器应用至关重要。

    png图片压缩

    "png压缩"工具或库通常提供了命令行接口或集成到构建流程中,方便开发者自动化处理大量PNG图片。例如,"pngcompress"可能是一个这样的工具,它能够批量处理jar包内的PNG图片,根据设定的参数进行优化和压缩。 总的...

    ThreadAnimation.rar_J2ME_Java_

    1. **初始化**: 加载动画所需的图片资源,创建Sprite对象,并设置其初始位置和大小。 2. **创建动画线程**: 创建一个新的Thread,用于执行动画逻辑。这个线程会定期更新Sprite的状态,如改变其位置或透明度。 3. **...

Global site tag (gtag.js) - Google Analytics