为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

[讲稿]图片半透明处理

2017-09-28 4页 doc 16KB 48阅读

用户头像

is_314871

暂无简介

举报
[讲稿]图片半透明处理[讲稿]图片半透明处理 图片半透明处理 J2ME图片半透明处理(使用图片像素)(仅部分手机支持)2010-01-16 01:43其实就是把一张图的argb值都取出来存在一个整型数组里(用Image对象的getRGB方法),然后用循环逐一修改argb值得最高位(最高位 的8个2进制值代表了阿尔法通道也不什么的,反正就是透明度),再用Graphics 的drawRGB方法以那个修改后的整型数组为参数画出图像。 import javax.microedition.midlet.*; import javax.microedit...
[讲稿]图片半透明处理
[讲稿]图片半透明处理 图片半透明处理 J2ME图片半透明处理(使用图片像素)(仅部分手机支持)2010-01-16 01:43其实就是把一张图的argb值都取出来存在一个整型数组里(用Image对象的getRGB),然后用循环逐一修改argb值得最高位(最高位 的8个2进制值代了阿尔法通道也不什么的,反正就是透明度),再用Graphics 的drawRGB方法以那个修改后的整型数组为参数画出图像。 import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class Midlet extends MIDlet { private Display display; private TCanvas tc; public void startApp() { this.display = Display.getDisplay(this); this.tc = new TCanvas(); this.display.setCurrent(tc); } public void pauseApp() { } public void destroyApp( boolean unconditional ) { } } =========================================================== =========== import java.io.IOException; import javax.microedition.lcdui.Canvas; import javax.microedition.lcdui.Graphics; import javax.microedition.lcdui.Image; public class TCanvas extends Canvas { Image image;//要处理的图片 int argb[]; public TCanvas() { super(); try { //创建图片对象(即原始图片,不透明) image = Image.createImage( "/qq.png" ); } catch( IOException e ) { e.printStackTrace(); } //下面步骤进行图片透明处理 argb = new int[ image.getWidth() * image.getHeight() ]; image.getRGB( argb, 0, image.getWidth(), 0, 0, image.getWidth(), image.getHeight() );//获得图片的ARGB值 int a = 100;//把象素的透明度都设置为100 for( int i = 0; i < argb.length; i ++ ) { argb[i] = ( a << 24 ) | ( argb[i] & 0x00FFFFFF );// 修改最高 2位的值 } } protected void paint( Graphics g ) { //清屏 g.setColor(0xffffff); g.fillRect(0,0,this.getWidth(),this.getHeight()); g.setColor(0); g.drawImage(image,0,0,Graphics.TOP|Graphics.LEFT); g.drawRGB(argb,0,image.getWidth(),0,100,image.getWidth(),im age.getHeight(),true);// 画象素数组 } } =========================================================== ============ 说明: 在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方法直接画出来的就是一个半透明效果的图片了,你可 以在画这个图片之前先画一个其他的图片,这样你就可以很明显地看 到效果了:
/
本文档为【[讲稿]图片半透明处理】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索