Bitmap类和BitmapData类
在影片中使用数字图像时会遇到两种不同类型的图形:位图和矢量图。Graphics类中提供了绘制矢量图的方法,对于位图,可以使用Loader类由外部导入,也可以使用ActionScript 3.0提供的位图相关类创建。Bitmap类和BitmapData类就是ActionScript 3.0中用于处理位图的两个重要的类。
位图图像有几个重要的指标,包括图像的宽度和高度(像素为单位)以及每个像素颜色的位数。在使用 RGB颜色模型的位图图像中,像素由三个字节组成:红、绿和蓝。每个字节包含一个 0~255 之间的值,三个字节共计24位。
位图图像的品质由图像分辨率和颜色深度位值共同确定。分辨率与图像中包含的像素数有关,像素数越大,分辨率越高,图像也就越精确。颜色深度与每个像素可包含的信息量有关。例如,颜色深度值为每像素48位的图像与16位图像相比,其阴影具有更高的平滑度。
由于位图图形跟分辨率有关,因此不能很好地进行缩放。当放大位图图像时,这一特性显得尤为突出,通常放大位图有损其细节和品质。
Flash支持gif、jpeg和png三种格式的位图,对于使用 gif 或 png 格式的位图图像还可以对每个像素添加一个额外字节——Alpha通道,表示像素的透明度值。
1. Bitmap类和BitmapData类简介
这两个类是ActionScript3.0处理位图的主要工具,它们的继承关系如下:
Bitmap→DisplayObject→EventDispatcher→Object
BitmapData→Object
由此可以看出,Bitmap类面向显示,而BitmapData类面向数据,它是位图的内部表示。用Bitmap类显示的位图可以是使用 flash.display.Loader 类加载的图像,也可以是使用 Bitmap() 构造函数创建的图像。而要使用这个构造函数创建位图,需要提供一个BitmapData类对象作为参数。
BitmapData类实现了位图呈现操作与 Flash 播放器的内部表示及更新分隔开来, BitmapData 类可以处理Bitmap对象中的数据(像素),处理以后的位图数据会立即显示在对应的Bitmap对象中。
可以使用 BitmapData 类提供的方法创建任意大小的透明或不透明位图图像,并在运行时采用多种方式操作这些图像。对于使用 flash.display.Loader 类加载的位图图像,也可以访问到它对应的BitmapData对象。
BitmapData 对象包含像素数据的数组,数组中的每个元素都是一个32位的整数,它描绘了位图中单个像素的属性。这32位整数都是四个 8 位通道值(从 0 到 255)的组合,这些值描述像素的 Alpha 透明度以及红色、绿色、蓝色 (ARGB) 值。
2. 属性和方法
Bitmap类的属性和方法比较少,最常用的是bitmapData类的属性,它指定了被引用的 BitmapData 对象。在实际针对位图的操作中,都是以BitmapData类为主,这个类包括4个只读属性,如表7-17所示。
表7-17 BitmapData类的属性
属性 |
含义 |
height |
位图图像的高度,以像素为单位。 |
rect |
定义位图图像大小和位置的矩形。 |
transparent |
定义位图图像是否支持每个像素具有不同的透明度。 |
width |
位图图像的宽度,以像素为单位。 |
BitmapData类提供了一系列方法用于操作位图图像,这些方法涉及创建与绘制位图、处理图像像素、复制位图等行为,表7-18列出了几个常用的方法。
表7-18 BitmapData类的方法举例
方法 |
含义 |
BitmapData() |
创建一个具有指定的宽度和高度的 BitmapData 对象。 |
colorTransform() |
使用 ColorTransform 对象调整位图图像的指定区域中的颜色值。 |
draw() |
使用矢量渲染器在位图图像上绘制 source 显示对象。 |
getPixel() |
返回BitmapData 对象中特定点处的 RGB 像素值。 |
getPixels() |
从像素数据的矩形区域生成一个字节数组。 |
setPixel() |
设置 BitmapData 对象的单个像素。 |
setPixels() |
将字节数组转换为像素数据的矩形区域。 |
hitTest() |
在一个位图图像与一个指定对象之间执行像素级的点击检测。 |
noise() |
使用表示随机杂点的像素填充图像。 |
scroll() |
按某一 (x, y) 像素量滚动图像 |
threshold() |
根据指定的阈值测试像素,将通过测试的像素设置为新的颜色值。 |
这些方法操作的位图图像,可以是导入的位图(loader.content)或者是自己创建的位图。要创建新位图需要使用构造函数BitmapData(),它的声明如下:
public function BitmapData(width:int,height:int, transparent:Boolean = true,
fillColor:uint= 0xFFFFFFFF)
前两个参数表示新建位图的宽和高;参数transparent表示位图是否支持每个像素包含不同透明度,默认支持;fillColor参数表示用于填充位图图像区域的32位ARGB颜色值,如果参数transparent被传递了flase值,则只使用32位中的24位表示不透明的图像。
下面的代码用这个构造函数创建了一个宽、高为150像素,具有50%透明度的蓝色 BitmapData 对象:
var myBitmap:BitmapData = newBitmapData(150, 150, true, 0x800000FF);
要显示这个位图图像,需要以myBitmap对象为参数创建一个Bitmap类的对象:
var myPic:Bitmap=new Bitmap(myBitmap);
addChild(myPic);
这三行代码会在舞台的左上角显示一个myBitmap对象中包含的矩形位图,如图7-78所示。
图7-78 显示创建的位图
对于使用Loader类对象导入的位图,可以使用下面的代码获得对其中像素数据的引用:
var myLoader:Loader=new Loader();
myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHd);
function completeHd(e:Event){
varmyPic:Bitmap=Bitmap(e.target.content); //先转换为Bitmap对象
varmyBitmap:BitmapData =myPic.bitmapData; //使用Bitmap对象的bitmapData属性得到引用
}
myLoader.load(newURLRequest("image.GIF"));
学习转载自:
blue的博客
http://blog.sina.com.cn/u/1748460141