Bitmap与BitmapData整理

    技术2022-05-20  34

    一、flash.display.Bitmap类及其两个子类

    1、继承自DisplayObject,和InteractiveObject平级,所以无法调度鼠标事件,可以使用额外的包装容器(Sprite)来实现侦听。

    2、只支持GIFJPEGPNG格式,不支持BMP(网上已有解决方法)

    3、构造函数: Bitmap(bitmapData:BitmapData = null, pixelSnapping:String = "auto", smoothing:Boolean = false)pixelSnapping是自动紧贴,smoothing是平滑处理

    4Bitmap类的子类mx.core.FlexBitmap:覆盖了toString(),用于指示对象在应用程序的DisplayObject层次结构中所处的位置。

    5FlexBitmap的子类mx.core.BitmapAsset:实现了IFlexAssetIFlexDisplayObject接口。在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 对象可以是 RectanglePointBitmap BitmapData 对象。此对象表示在其上执行冲突检测的点击区域。

    secondBitmapDataPoint (Point):此可选参数用于在第二个 BitmapData 对象中定义像素位置。只有当 secondObject 的值为 BitmapData 对象时,才使用此参数。默认值为 null

    secondAlphaThreshold (uint):此可选参数表示在第二个 BitmapData 对象中视为不透明的最高 Alpha 通道值。默认值为 1。只有当 secondObject 是一个 BitmapData 对象且两个 BitmapData 对象都透明时,才使用此参数。

    5applyFilter添加滤镜、fillRect使用指定颜色填充一个矩形像素区域

    http://hi.baidu.com/

    转载请注明原文地址: https://ibbs.8miu.com/read-2219770.html

    最新回复(0)