在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实现半透明效果相关推荐

  1. Eeic Meyer on CSS 之 背景半透明效果

    CSS 并不支持任何形式上的半透明的效果. 书上介绍了两种方法来达到半透明的效果. 第一种是利用"半屏(halfscreen)",是由Todd Fahrner 提出的. 原理上就是 ...

  2. unity shader 入门 全透明与半透明效果实现

    片元函数的fixed4类型的返回值的第4位即为阿尔法值,0代表完全不显示(透明),1代表完全显示.中间的数值代表半透明.但只修改这个值是不能直接修改透明度的,因为还要对队列等进行修改. 本文介绍透明度 ...

  3. Visual C++游戏编程基础之透明半透明效果

    一.基本思路 1.半透明的原理 一张位图由许多像素组成,而每一像素包含R.G.B三原色,三原色的值决定了像素的色彩,要实现半透明效果,需要把前景图    和背景图彼此对应的像素颜色按某一比例进行调配, ...

  4. 为Symbian程序中的图片增加半透明效果

    我封装了一个方法,传入相应的图片,就会把图片变成半透明效果并显示在程序界面上. void CMegajoyContainer::ConvertToAlpha(CWindowGc& gc,CFb ...

  5. css背景图片半透明效果

    css 设置背景色半透明效果,参数 background:rgba(x,x,x,x) 最后一个a表示半透明,取值是0-1

  6. CSS背景半透明效果

    说到CSS的透明效果可以使用如下方式: 1. opacity属性设置:例如opacity:0.7,而低版本的IE浏览器不直接支持这个属性,但是可以使用滤镜filter:alpha(opacity:70 ...

  7. css3的半透明效果

    引自:http://www.divcss5.com/css-hack/c574.shtml filter:alpha(Opacity=50);-moz-opacity:0.5;opacity:0.5; ...

  8. HTML5系列代码:RGBA半透明效果

    CSS 中的颜色有三种定义方式:使用颜色方法(RGB.RGBA.HSL.HSLA),十六进制颜色值和预定义的颜色名称. RGBA 是代表Red(红色) Green(绿色) Blue(蓝色)和 Alph ...

  9. OpenGL 半透明效果的实现(混合)、雾效果 和 圆滑(抗锯齿)

    在前面的glColor总是忽略最后一个参数alpha,今天就来学习下这个参数的使用 在早上的光照球体的例子基础上进行演示,早上的例子是在白色的地面上有几个彩色的球体和一个类似于玉镯子的模型,利用半透明 ...

最新文章

  1. 无需3D运动数据训练,最新人体姿势估计方法达到SOTA | CVPR 2020
  2. 人工智能实践:TensorFlow笔记学习(一)—— 人工智能概述
  3. 更改Oracle数据库的SID
  4. tensorrt动态输入分辨率尺寸
  5. Windows Sockets错误标识及对应解释
  6. js判断是否是ie浏览器
  7. 西北工业大学计算机毕业论文,光纤通信发射机本科毕业论文 西北工业大学.docx...
  8. pupload 文件分块 php,基于Plupload实现Base64分割的文件上传方案
  9. 演示一个简单的Redis队列
  10. 中国已与36个国家(地区)海关实现“经认证的经营者”(AEO)互认
  11. __construct __destory __call __get __set
  12. 35岁腾讯员工:准备退休!1kw房产+1kw股票+3百万现金,勉强够用了
  13. 前台传来的文件通过流stream转成bytes 再把文件写入数据库 类型是blob
  14. Linux网络管理实战2-组建局域网
  15. Web前端工程师的职业规划,助你走好前端路
  16. matlab仿真放入直流电源,用Matlab/Simulink软件包建模电容滤波直流电源
  17. 支付宝提示服务器有【中危漏洞】任意邮件伪造检测
  18. 麦子学院项目-懒人天气App思维导图、素材下载
  19. c语言程序电子琴21个音符,儿童电子琴入门《认识附点音符,二分附点音符》
  20. PHP7封装了str_ends_with, phper看了都说好

热门文章

  1. linux定时at,Linux定时任务之at
  2. c语言编程求无向图的连通分支,无向图的连通分支
  3. 让人头大的地理坐标和投影,这些你必须知道(超全面)
  4. FinTech未来趋势:中美联手共赢 科技金融融合
  5. 仓库管理系统、WMS、仓储管理、入库、出库、移库、调拨、报损、盘点、采购、退货、业务管理、销售、财务记账、应收、应付、库存清单、库存预警、库存容量、库存台账、库位管理、产品管理、承运商、供应商、权限
  6. IT 入职感言 模板
  7. java计算机毕业设计客户台账管理源程序+mysql+系统+lw文档+远程调试
  8. 如何快速打造一款高清又极速的短视频APP?
  9. python哪个文字转语音好用_在电脑上哪款文字转语音软件比较好用?
  10. Macrorit Partition Expert v5.7.0 硬盘分区管理软件单文件中文版