J2ME中的图片透明处理效果



       MIDP2.0中提供了对图片的象素级的处理,利用这一点,我们可以对图片进行相关的处理,比如半透明,把彩色图片处理成灰度图片,以及图片变色效果都可以在J2ME里很方便地实现。
 
  在进行这些操作之前,我们必须先了解JAVA中的一些位操作符:

  <<,>>,&,|,主要是这几个操作符,下面我们就开始我们的操作

  半透明处理

  在PNG里每个象素是一个ARBG格式,是一个8位的十六进制的数字,比如0xff121212,这个东西描述了图片的一个象素,我们可以通过Image类中的getRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height) 方法获得一个rgbData,这个rgbData就保存了图片所对应的象素信息,取出象素信息之后我们需要对其进行透明效果的处理,透明效果的值是保存在8位中的最高2位,你可以把这个象素值转换成16进制输出,一般情况下最高2位应该都是为FF,也就是不透明,我们现在需要把这个FF改成一个比他小的值,那么我们的图片就透明了,最高位为00的时候图片就全透明了。

  其实8位16进制对应了32位的2进制,那么我们可以通过下面的方法取出他的最高2位:

  A = Argb>>24//把这个数向右移动24位,那么剩下的8位就是我们要的最高位了

  修改之后我们再通过下面的方法可以把他存回去 Argb = a<<24 |( argb & 0x00FFFFFF);

  那么我们通过循环把这个图片的所有象素信息都改变之后,在用改变的象素信息来构造一个图片,或者这个通过我们的Graphics 下面的drawRGB方法直接画出来的就是一个半透明效果的图片了。
  1. public class TransparantCanvas extends Canvas {
  2.     Image image;// 要处理的图片
  3.     int argb[];
  4.     public TransparantCanvas() {
  5.     super();
  6.     try {
  7.     image = Image.createImage("/test.png");//导入图片
  8.     } catch (IOException e) {
  9.     e.printStackTrace();
  10.     }
  11.     argb = new int[image.getWidth()*image.getHeight()];
  12.     image.getRGB(argb,0,image.getWidth(),0,0,image.getWidth(),image.getHeight());//获得图片的ARGB值
  13.     int temp;
  14.     int a= 100;//把象素的透明度都设置为100
  15.     for(int i=0;i<argb.length;i++){
  16.         argb[i]=((a<<24)|(argb[i]0x00FFFFFF));// 修改最高2位的值
  17.     }
  18.     }
  19.     protected void paint(Graphics g) {
  20.         g.drawImage(image, 00, Graphics.TOP | Graphics.LEFT);
  21.         g.drawRGB(argb, 0, image.getWidth(), 0100, image.getWidth(), image
  22.                 .getHeight(), true);// 画象素数组
  23.     }
  24. }
------------------------------------------------------------------------
  1. public class TransparaentMIDlet extends MIDlet {
  2.     private Display display;
  3.     private TransparantCanvas canvas;
  4.     public TransparaentMIDlet() {
  5.         display=Display.getDisplay(this);
  6.         canvas=new TransparantCanvas();
  7.     }
  8.     protected void destroyApp(boolean arg0)  {
  9.     }
  10.     protected void pauseApp() {
  11.     }
  12.     protected void startApp() throws MIDletStateChangeException {
  13.         display.setCurrent(canvas);
  14.     }
  15. }

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值