`

J2me实现半透明效果

    博客分类:
  • J2me
阅读更多

在J2ME MIDP1.0规范中并未实现半透明 功能,只有少数手机厂商提供这方面的API,例如诺基亚.到了MIDP2.0,虽然已经提供了像getRGB(),drawRGB()这样的API,但仍然有很部分MIDP2.0的手机不能实现半透明(目前所知的摩托E398就无法实现半透明),鉴于这种情况,使得在游戏开发中,不可能用同一种方法实现各种不同品牌不同机型上的半透明效果),因而,必须对具体机型做针对性的处理.以下是两种创建半透明图片的方法:

1.利用诺基亚自身提供的API,适合诺基亚手机和支持诺基亚开发包的手机(如索爱K700)

/** *//**
   * @param path 源图片的路径
   * @param w 源图片宽
   * @param h 源图片高
   * @return 半透明图
   */
  Image createAlphaImage(String path,int w,int h) ...{
   DataInputStream dis = new DataInputStream(getClass().getResourceAsStream(path));
   ByteArrayOutputStream baos = new ByteArrayOutputStream();
  try ...{
    try ...{
      while (true) ...{
        baos.write(dis.readByte());
      }
    }
    catch (IOException ex1) ...{
    }
    dis.close();
  }
  catch (IOException ex) ...{
  }
   //将源PNG图片数据转成字节数组
   byte[] data=baos.toByteArray();
   short[] pixels=new short[w*h];
  
   //创建可变图片
   Image img=DirectUtils.createImage(data,0,data.length);
   Graphics g=img.getGraphics();
   DirectGraphics dg=DirectUtils.getDirectGraphics(g);
   //此处DirectGraphics.TYPE_USHORT_4444_ARGB只针对QD等1.0的手机 对于2.0手机根据具体颜色制式做调整
   dg.getPixels(pixels,0,w,0,0,w,h,DirectGraphics.TYPE_USHORT_4444_ARGB);
   int length=pixels.length;
   for(int i=0;i<length;i++)...{
       //设置alpha值 即半透明度
     pixels[i]=(short)((pixels[i]&0x0fff)+0x3000);
   }
   dg.drawPixels(pixels,true,0,w,0,0,w,h,0,dg.TYPE_USHORT_4444_ARGB);
   return img;
  }
对于上面getPixels()方法,由于QD系列手机中分别采用4个bit来表示RGB三种颜色,另加4bit作为alpha通道,因此,它的颜色制式实现上只占用4*4=16bit,即一个short,所以用DirectGraphics.TYPE_USHORT_4444_ARGB制式.对于其他机型,可参考诺基亚J2ME开发文档.

以上方法适用于通过已有图片创建半透明图片.而对于想创建半透明的纯色图片,则更简单.

/** *//**
  * 创建半透明图片
  * @param argb 半透明度 取值在0到100之间
  * @param width 图片宽度
  * @param height 图片高度
  * @return 创建好的半透明图片
  */
  public static Image createAlpImageQD(int argb,int w,int h)...{
  int length=w*h;
  short[] pixels=new short[length];
  try...{
      //创建一张黑色的可变图片
  Image img=DirectUtils.createImage(w,h,0x0000);
  Graphics g=img.getGraphics();
  DirectGraphics dg=DirectUtils.getDirectGraphics(g);
  int alpha=(argb*0xf/100)&0xf;
  argb=alpha<<12;
  for(int i=0;i<length;i++)...{
  pixels[i]=(short)(0x0|argb);
  }
  dg.drawPixels(pixels,true,0,w,0,0,w,h,0,DirectGraphics.TYPE_USHORT_4444_ARGB);
//  numb2=200;
  return img;
  }catch(Exception e)...{}
  return null;
  }
2,使用MIDP2.0提供的API实现半透明

/** *//**
  * 创建半透明图片(MIDP2.0)
  * @param path 源PNG图片路径
  * @return 创建好的半透明图片
  */
  Image createAlphaImage(String path)...{
      try...{
          Image tmpImage = Image.createImage(path);
      int[]data=new int[tmpImage.getWidth()*tmpImage.getHeight()];
      tmpImage.getRGB(data,0,tmpImage.getWidth(),0,0,tmpImage.getWidth(),tmpImage.getHeight());
      int len=data.length;
      for(int i=0;i<len;i++)...{
          //0x65000000为半透明度,可根据需要适当调整
        data[i]=data[i]+0x65000000;
      }
      return Image.createRGBImage(data,tmpImage.getWidth(),tmpImage.getHeight(),true);
      }
      catch(Exception e)...{
          System.out.println("create Alpha Image fail!!");
          return null;
      }
  }

分享到:
评论

相关推荐

    j2ME实现半透明圆

    j2ME实现半透明圆,和椭圆的效果,只适用于2.0版本的

    j2me半透明图片实现

    在J2ME(Java 2 Micro Edition)平台上,开发移动应用程序时,有时我们需要处理图片,包括显示、缩放以及实现半透明效果。本篇将详细解释如何在J2ME中实现半透明图片以及图片的缩放功能。 首先,让我们探讨如何实现...

    j2me透明泡泡碰撞算法小演示

    通过设置正确的Alpha值,我们可以创建具有半透明效果的泡泡。 碰撞算法是程序的核心部分。在这个项目中,作者可能使用了简单的矩形碰撞检测,即比较每个泡泡的边界矩形是否相交。这种方法快速且易于实现,但可能会...

    J2ME手机开发中得透明图片处理

    当Alpha通道的值不为0时,根据具体数值表示不同程度的半透明效果。 ##### 2. 自定义绘制透明图片 如果需要自定义绘制一张透明图片,则需要先创建一个可变的`Image`对象,然后通过`Graphics`对象在其上绘制所需内容...

    J2ME项目图片可以作为开发

    常见的格式有GIF、PNG和JPEG,其中PNG支持透明度,适用于需要精细图形和半透明效果的场合。开发者需要根据实际需求进行图片压缩和尺寸调整,以确保在各种设备上流畅运行。 4. **使用素材的注意事项** 在使用这些...

    手机中的图片处理

    对于需要通过程序绘制图片并实现半透明效果的需求来说,这显然是不够的。 #### 二、实现透明图片的具体步骤 为了通过程序绘制图片并实现半透明效果,可以按照以下步骤操作: 1. **创建可变图片**:首先通过`Image...

    EVC实现图形显示特技

    还可以通过`setAlpha()`调整透明度,实现半透明效果。 2. **变换矩阵**:通过`translate()`, `rotate()`, `scale()`等方法,可以对图形进行平移、旋转和缩放,从而实现动态效果。 3. **绘图模式**:`setPaintMode...

    pngmate(png图片处理软件)

    4. 透明度处理:PNGMate支持PNG的alpha通道,可以处理半透明图像。这对于手机游戏中的角色动画、背景层叠等效果至关重要,可以实现更加细腻的视觉体验。 5. 压缩功能:PNG本身就是一种压缩格式,但PNGMate提供了更...

    java源码包---java 源码 大量 实例

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    java源码包2

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    java源码包3

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    java源码包4

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java数组倒置 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java数组倒置 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印...

    Java源码包100个设计实例.zip

    Java半透明图片实现的步骤及源代码.rar Java右键弹出菜单源码 Java吃豆子游戏源代码.rar Java图片加水印,支持旋转和透明度设置 Java圆形按钮实例代码,含注释 Java圆形电子时钟源代码 Java多用户聊天室程序(毕业...

    JAVA上百实例源码以及开源项目源代码

    Java数组倒置 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印...

Global site tag (gtag.js) - Google Analytics