[AS3]as3中的BitmapData类理解与介绍
最近在看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位颜色0xRRGGBB和32位颜色0xAARRGGBB。其中0x是16进制数字的意思,后面的每两位都代表着0~F,16个范围,所以每个颜色通道都有16*16=256位的数值,其中32位颜色就是多了一个AA(透明度)通道。
4,rect
返回BiamapData所占的矩形对象(Rectangle),你可以暂时理解为一个对象,这个对象储存了x,y,width,height等数值。
热门文章推荐
- [HLS]做自己的m3u8点播系统使用HTTP Live Streaming(HLS技术)
- [FMS]FMS流媒体服务器配置与使用相关的介绍
- [AS3]什么是M3U8,与HTML5的区别是什么
- AS2.0 让flash自适应全屏,并且不自动缩放
- [AS3]as3.0的sound类常用技巧整理
- [AS3]as3与ByteArray详解、ByteArray介绍、ByteArray用法
- 关于RTMP,RTMPT,RTMPS,RTMPE,RTMPTE协议的介绍
- [JS]分享浏览器弹出窗口不被拦截JS示例