·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

[AS3]as3中的BitmapData类理解与介绍

时间:2013-08-08 00:09cuplayer
我 们知道传统的矢量渲染模式下,任何元件的位移和变型以及任何改变显示的变化都会使得Flashplayer对其进行绘制,并渲染到显示器。

  最近在看BitmapData这个类,对这个东西也不是很熟悉,所以在网上看了一些资料,现在把他们都整理了一下,我想通过以下这些会让大家会对BitmapData这东西有个深刻的了解,对大家的理解有所帮助。

  利用BitmapData的优势: 

  我 们知道传统的矢量渲染模式下,任何元件的位移和变型以及任何改变显示的变化都会使得Flashplayer对其进行绘制,并渲染到显示器。(Fl9以后有 所优化,但改变不了根本)而BitmapData可以先进行像素数据的操作,操作之后在进行渲染。并且跳过FP的绘制,直接将像素数据交给显示渲染。 

  开发游戏的角色使用mc(影片)还是BitmapData?很多的游戏,都是使用mc的,mc的优点是很直观,所见即所得,占用内存很少,缺点是效率不高(当效率是瓶颈的时候是缺点,其他时候可能也不算)。

  BitmapData的优点是效率高,管理有些麻烦,占用内存高。

小问题,为什么mc效率没Bitmap高呢?
mc中的位图在编译后,是以shape形式存在,也就是说,使用的是矢量渲染器渲染,进行位图填充,效率很低。
mc中的矢量图片,也是用矢量渲染器渲染,复杂的图像,非常耗cpu。
BitmapData的是将数据存在内存中,真正的位图渲染,效率非常高。

  BitmapData的理解

 

  BitmapData主要提供的是对图像的“像素级”的操作,如果你想切实感受一下,有个挺好的办法,打开Flash,然后CTRL+R导入一张图片,然后再按CTRL+B打散,这时得到的图片状态就有点BitmapData的味道了···而其他用FLASH矢量工具画出来的都可以理解为BitmapData的一种。

  下面再深一步说,BitmapData的名字可以拆开来看,就是Bitmap+Data,翻译成中文就是:位图数据,所以它可以看作数据储存的一种,而不是真正的显示对象,要想看到BitmapData,我们需要把Bitmapdata赋到一个Bitmap对象中,然后addChild(Bitmap),那么就能看到具体的画面了

  那么BitmapData的像素级操作作用在哪呢?比较大家喜欢津津乐道的就是粒子效果,作为一个需要大量计算的应用来说,1像素长宽的粒子无疑是能存在的最小的粒子;另外一个是作为数据传输,大家如果想实现上传图片或者下载图片的效果,基本的理念就是将Bitmapdata使用JPEGEncoder编码成二进制数据,把二进制发送给服务器端;第三种是滤镜视觉特效,例如一些水波划动特效;第四种是视频摄像头的视频检测;当然还有很多有趣的玩法,例如通过Bitmapdata压缩数据之类的。

  (注:从上面性能来看,对数据的传输,对数据的压缩,和运用的效率来看,利用BitmapData还是一种很有效的方式。);

  使用Bitmap和BitmapData时很容易犯一个错误

  flash.display.Bitmap
The Bitmap class represents display objects that represent bitmap images.

  flash.display.BitmapData
The BitmapData class lets you work with the data (pixels) of a Bitmap object.

  由此可知Bitmap Class的主要功能是显示点阵影像,而BitmapData Class的功能主要是处理Bitmap每个像素资料
所 以当我们要处理影像时千千万万不要对Bitmap下手,因为Bitmap的功能只能把影像的资料显示出來,而要处理影像必須先把Bitmap的次料交給 BitmapData,再由BitmapData来对每个pixels处理才行,还有一个也是经常有人会发生的错误是直接把BitmapA的 bitmapData Assign給BitmapB的bitmapData,当对BitmapB的BitmapData做更动时BitmapA也会跟著更动因为这两个 Bitmap根本就Bindding同一个BitmapData,就像两个DataGrid Bindding同一份DataProvider的意思是一样的,当其中的DataGrid的dataProvider做修改,两个同时都会修改,所以当 希望两个影像能各做各的事的话记得要再new一个新的BitmapData才行,否则只会把两个影像的资料绑死在一起。

  二,公共属性

  BitmapData的公共属性很少,只有4种,而且都属于Read-Only(只读),只读的意思就是“只能读”(好废话),所以我们可以取出BitmapData的属性来做运算,但是却不能赋值给它们,跟只读区别的就是Read-Write(读写)

  有时程序有莫名其妙的问题,可以查看帮助文档,是不是因为你尝试对只读属性进行了赋值导致的。

  1,height

  就是Bitmapdata存储像素数据的高度

  2,width

  同 理,就是Bitmapdata存储数据的宽度,这里扯多一句,一般保存长宽的都是Number属性,因为长宽可能存在小数点,而有些其他的属性可能是 int的,把带有小数点的值赋值给int的属性的话,会自动把小数点后面的数值去掉,造成一些莫名其妙的错误,所以写代码的时候要多注意看代码提示里的属 性说明。

  3,transparent

  是一个Boolen值,表示此Bitmapdata是否支持透明像素,一般的颜色分为16位颜色0xRRGGBB32位颜色0xAARRGGBB。其中0x是16进制数字的意思,后面的每两位都代表着0~F,16个范围,所以每个颜色通道都有16*16=256位的数值,其中32位颜色就是多了一个AA(透明度)通道。

  4,rect

  返回BiamapData所占的矩形对象(Rectangle),你可以暂时理解为一个对象,这个对象储存了x,y,width,height等数值。

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器