一、flash.display.Bitmap类及其两个子类
1、继承自DisplayObject,和InteractiveObject平级,所以无法调度鼠标事件,可以使用额外的包装容器(Sprite)来实现侦听。
2、只支持GIF、JPEG、PNG格式,不支持BMP(网上已有解决方法)
3、构造函数: Bitmap(bitmapData:BitmapData = null, pixelSnapping:String = "auto", smoothing:Boolean = false),pixelSnapping是自动紧贴,smoothing是平滑处理
4、Bitmap类的子类mx.core.FlexBitmap:覆盖了toString(),用于指示对象在应用程序的DisplayObject层次结构中所处的位置。
5、FlexBitmap的子类mx.core.BitmapAsset:实现了IFlexAsset、IFlexDisplayObject接口。在FLEX应用程序中,通常不必直接使用此类,MXML编译器会自动生成,比如:
<mx:Image id = “logo” source = “@Embed(source = ‘Logo.gif’)”/>
不过,在AS级别,则可以对图片进行更多的操作(比如使用BitmapData类的一些方法):
[Bindable]
[Embed(source = “Logo.gif”)]
private var logoClass:Class;
var logo:BitmapAsset = BitmapAsset(new logoClass());
logo.bitmapData.noise(4);
<mx:Image id = “logo” source = “{logoClass}”/>
二、flash.display.BitmapData类及常用类方法简介
1、继承自Object,可以看作一个专门用来存储位图像素点阵信息的数组。比如大小100x100的位图,其BitmapData就相当于一个100x100的二维数组,对应存储了10000像素的颜色值。这个颜色值是一个32位的ARGB值,用uint整数类型表示,即alpha 和red green blue 三原色。0xFF669900代表不透明的橙色,其中FF表示16进制的最大数,alpha值的范围也就在0x00-0xFF之间,比如十六进制80就是十进制的128,也就是透明度256的一半。
2、构造函数:BitmapData(width:int, height:int, transparent:Boolean = true,fillColor:unit = 0xFFFFFFFF),width 和 height 参数指定位图的大小,二者的最大值都是 2880 像素。transparent是透明度,设置为false时,颜色值仅使用24位的RGB值,这可以略微提升呈现性能。但需要注意的是,设置为不透明位图后,将无法再更改为透明位图。fillColor是用于填充位图区域的 32 位 ARGB 颜色值,默认为0xFFFFFFFF(纯白色)。
3、像素处理(参考http://www.skill8.net/article.asp?id=15)
处理单个像素:获取要处理的区域中包含的像素的颜色值。使用 getPixel() 方法可读取这些单个的像素值。getPixel() 方法从作为参数传递的一组 x, y(像素)坐标中检索 RGB 值。getPixel32() 返回的值包含表示所选像素的 Alpha 通道(透明度)值的附加数据。同理设置单个像素:如果只想更改位图中包含的某个像素的颜色或透明度,则可以使用 setPixel() 或 setPixel32() 方法。若要设置像素的颜色,只需将 x, y 坐标和颜色值传递到这两种方法之一即可。 设置某个区域请使用 getPixels() 方法。此方法从作为参数传递的矩形像素数据区域中生成字节数组。字节数组的每个元素(即像素值)都是无符号的整数(32 位未经相乘的像素值)。相反,为了更改(或设置)一组像素值,请使用 setPixels() 方法。此方法需要联合使用两个参数(rect 和 inputByteArray)来输出像素数据 (inputByteArray) 的矩形区域 (rect)。从 inputByteArray 中读取(或写入)数据时,会为数组中的每个像素调用 ByteArray.readUnsignedInt() 方法。如果由于某些原因,inputByteArray 未包含像素数据的整个矩形,则该方法会停止处理该点处的图像数据。必须记住的是,对于获取和设置像素数据,字节数组需要有 32 位 Alpha、红、绿、蓝 (ARGB) 像素值。
4、像素级别冲突检测
这个有什么用?我有一个对象需要判断是否和PNG图片碰撞,但是PNG图片的边缘是透明的时候,这个就有用了。
BitmapData.hitTest() 方法可以在位图数据和另一个对象或点之间执行像素级别冲突检测。
hitTest(firstPoint:Point, firstAlphaThreshold:uint, secondObject:Object, secondBitmapDataPoint:Point = null, secondAlphaThreshold:uint = 1):Boolean
firstPoint (Point):此参数指在其上执行点击测试的第一个 BitmapData 的左上角的像素位置。
firstAlphaThreshold (uint):此参数指定对于此点击测试视为不透明的最高 Alpha 通道值。
secondObject (Object):此参数表示影响区域。secondObject 对象可以是 Rectangle、Point、Bitmap 或 BitmapData 对象。此对象表示在其上执行冲突检测的点击区域。
secondBitmapDataPoint (Point):此可选参数用于在第二个 BitmapData 对象中定义像素位置。只有当 secondObject 的值为 BitmapData 对象时,才使用此参数。默认值为 null。
secondAlphaThreshold (uint):此可选参数表示在第二个 BitmapData 对象中视为不透明的最高 Alpha 通道值。默认值为 1。只有当 secondObject 是一个 BitmapData 对象且两个 BitmapData 对象都透明时,才使用此参数。
5、applyFilter添加滤镜、fillRect使用指定颜色填充一个矩形像素区域
http://hi.baidu.com/