Bitmap类和BitmapData类

来源:互联网 发布:第三方数据监测 编辑:程序博客网 时间:2024/05/01 19:58

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

 

0 0