精通BitmapData
一、构造方法:
var bmd:BitmapData=new BitmapData(200,100,true,0xffff0000);
参数说明:
1、宽
2、高
3、是否使用32位填充位图(包括alpha)
4、填充色。
二、属性(注意:所有属性都是只读)
1、widht 宽
2、height 高
3、rect 矩形范围,即:Rectangle
4、transparent 透明度,即:是否使用32位填充。
三、方法
1、applyFilter():使用滤镜
applyFilter(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, filter:BitmapFilter):
参数说明:
sourceBitmapData:源位图数据,可以是当前bitmapData,也可以把别的bitmapData作滤镜处理后用于当前bitmapData.
sourceRect:源矩形,决定着对那一块区域使用滤镜。
destPoint:目标点,使用到目标位图数据后对滤镜区域进行坐标偏移。
filter:要应该的滤镜。
2、clone():BitmapData
返回一个新的 BitmapData 对象,它是对原始实例的克隆,包含与原始实例所含位图完全相同的副本。
3、colorTransform() :对位图数据进行颜色变化。
colorTransform(rect:Rectangle, colorTransform:ColorTransform):
4、compare(): 对两个位图数据进行比较。
compare(otherBitmapData:BitmapData):
说明:
1)要求两个位图数据的高、宽要一样,否则无法比较。
2)比较时红色跟红色比,绿色跟绿色比,蓝色跟蓝色比,请注意,他们的差值永远是正的,也就是要取绝对值。
3)比较的结果是返回一个新Object,需要强制转换为BitmapData
4)如果两个位图数据高、宽、颜色完全一样,则比较没有意义。生成的bitmapData=null.
5)上面的比较都在忽略alpha的基础上,如果两个位图数据有不同的alpha,比较可能变得更加复杂,不才经过几次测试后仍不能得到正确的答案。
5、copyChannel():拷贝通道;
copyChannel(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, sourceChannel:uint, destChannel:uint):
参数说明:
sourceBitmapData:源位图数据,当然可以去别的位图数据中拷贝通道。
sourceRect:源矩形,拷贝的范围。
destPoint:目标点,拷贝到目标位图数据后对坐标进行偏移。
sourceChannel:源通道,即:要拷贝的是哪一个通道。
destChannel:目标通道,即:要拷贝到目标位图数据的哪一个通道。
注意事项,拷贝通道属于一种覆盖型拷贝而非叠加型拷贝,拷贝后目标通道的原有数据将被覆盖。
下面是一种最简单的给图片去色的方法。
bmd1.copyChannel(bmd1,bmd1.rect,new Point(),2,1);//把绿色通道拷贝到红色通道。
bmd1.copyChannel(bmd1,bmd1.rect,new Point(),2,4);//把绿色通道拷贝到蓝色通道。
注意,当三个通道的颜色信息值一样时,图片就变成灰色了。但这样做有一个缺点:它仅仅只是以一个通道为基准而对图片去色。更准确的去色方法请参考滤镜:ColorMatrixFilter () 颜色矩阵滤镜。
6、copyPixels() :拷贝象素。copyPixels(sourceBitmapData:, sourceRect:, destPoint:, alphaBitmapData: = null, alphaPoint: = null, mergeAlpha: = false):费话不想多说,最后三个参数搞不懂也。
7、dispose() :释放内存。
对此 BitmapData 实例的方法或属性的所有后续调用都将失败,并引发异常。
8、draw() :绘制数据。
draw(source:IBitmapDrawable, matrix:Matrix = null, colorTransform:ColorTransform = null, blendMode:String = null, clipRect:Rectangle = null, smoothing:Boolean = false):
参数说明:
source:要绘制的对象,几乎可以是所有的显示对象。当然,还可是以非显示类的bitmapData
matrix:使用矩阵,因为draw()方法不考虑对象的坐标,缩放,旋转的因素,所在需要使用matrix来达到移动,缩放,旋转等功能。
colorTransform:颜色变化。
blendMode:混合模式。
clipRect:要绘制的矩形区域。
smoothing:是否进行平滑处理,使用matrix后,对象可能会有锯齿,要求source是bitmapData是才有作用。
9、fillRect() :给指定的矩形区域填充颜色。
fillRect(rect:Rectangle, color:uint)
10、floodFill() :倾倒填充
floodFill(x:int, y:int, color:uint)
说明:在坐标x,y处查找点并倾倒颜色,以该点相邻的且着色相同的全部被指定的color倾倒填充
11、generateFilterRect () :返回:Rectangle,得到滤镜后的矩形。
generateFilterRect(sourceRect:Rectangle, filter:BitmapFilter):Rectangle
参数:
sourceRect: 使用滤镜的矩形区域。
filter: 使用的滤镜。
说明:有些滤镜,比如模糊,使用后所影响到的区域要比原先的区域大一些,此时可以用此方法获得所影响到的区域。
12、getColorBoundsRect () :获得颜色区域。返回:Rectangle.
getColorBoundsRect(mask:uint, color:uint, findColor:Boolean = true):Rectangle
参数说明:
mask:颜色掩码。简单解释一下:最终查找的颜色是mask&color。即mask跟color的逻辑与运算,即转换为二进制后,相同数位都是1则才为1.所以,如果没有特别的要求,请把mask设置为0xffffffff.
color:要查找的颜色。
findColor:匹配颜色还是反向匹配颜色。如果该值设置为 true
,则返回图像中颜色值的范围。 如果该值设置为 false
,则返回图像中不存在此颜色的范围。
13、getPixel(x:int,y:int) :uint 和 getPixel32(x:int,y:int):uint;
获得某个像素的24位色或32位色。
14、setPixel(x:int,y:int) :uint 和 setPixel32(x:int,y:int):uint;
设置某个像素的24位色或32位色。
15、getPixels(rect:Rectangle):ByteArray 和 setPixels (rect:Rectangle, inputByteArray:ByteArray) :void
注意;这两方法最后有一个s,是复数,获得或设置某个区域的像素,第一个的返回值是ByteArray.
16、hitText() ;高级碰撞检测。
hitTest(firstPoint:Point, firstAlphaThreshold:uint, secondObject:Object, secondBitmapDataPoint:Point = null, secondAlphaThreshold:uint = 1):Boolean
参数说明:
firstPoint:相对于当前bitmapData的坐标点。
firstAlphaThreshold:要检测的当前bitmapData的透明度,有效值是0—255,
secondObject:检测与哪一个对象发生碰撞,即:目标对象。
secondObject:目标对象的坐标点。
secondAlphaThreshold:目标对象的透明度。
注:关于hitText的更详细用法,请参考本Blog的相关文章。
17、lock() 和 unlock()
若要提高性能,请在对 setPixel()
或 setPixel32()
方法进行多次调用之前和之后使用 loce() 方法及 unlock()
方法。
18、merge() 图像混合。
merge(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, redMultiplier:uint, greenMultiplier:uint, blueMultiplier:uint, alphaMultiplier:uint)
参数说明:
前三个参数:略:
第四、五、六、七个参数:
各通道的乘数,有效值0—255
例如,在红色通道中,新值是按如下方式计算的(其中 redSrc
是源图像中像素的红色通道值,而 redDest
是目标图像中对应像素的红色通道值):
new redDest = [(redSrc * redMultiplier) + (redDest * (256 - redMultiplier))] / 256;
从这个公式可以看出,最终的颜色是靠源颜色和目标颜色合成的,如果目标颜色占了80%的份量,那么源颜色只能占20%。另外,从公式还可以看出,如果原来的BitmapData的透明度是100%的话,设置alphaMultiplier显然变得毫无意义,但们最终的透明度仍然是100%.
19、noise():使用表示随机杂点的像素填充图像
noise(randomSeed:, low: = 0, high: = 255, channelOptions: = 7, grayScale: = false)
参数说明:
randomSeed:要使用的随机种子数。 如果您保持使所有其它参数不变,可以通过改变随机种子值来生成不同的伪随机结果。 杂点函数是一个映射函数,不是真正的随机数生成函数,所以它每次都会根据相同的随机种子创建相同的结果
low:要为每个通道生成的最低值(0 到 255)。 (最暗)
high:要为每个通道生成的最高值(0 到 255)。 (最亮)
channelOptions:一个数字,可以是四个颜色通道值(BitmapDataChannel.RED
、BitmapDataChannel.BLUE
、BitmapDataChannel.GREEN
和 BitmapDataChannel.ALPHA
)的任意组合。 您可以使用逻辑 OR 运算符(|
)来组合通道值。
grayScale:一个布尔值。 如果该值为 true
,则会通过将所有颜色通道设置为相同的值来创建一个灰度图像。 将此参数设置为 true
不会影响 Alpha 通道的选择
20、paletteMap () :调色板
paletteMap(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, redArray:Array = null, greenArray:Array = null, blueArray:Array = null, alphaArray:Array = null)
参数说明:
前三个参数不用多说,后四个参数分别的红、绿、蓝、透明通道的数据映射数组,如果省略在前的参数则需要传递null.
它们都是一组长度为256(0-255)的数组,用于存储每个通道的十六进制映射值,例:
var redArr:Array=[];
var blurArr:Array=[];
var greenArr:Array=[];
for(var i:int=255;i>-1;i--){
redArr.push(00<<24|i<<16|0<<8|00)
blurArr.push(00<<24|0<<16|i<<8|00)
greenArr.push(00<<24|0<<16|0<<8|i)
}
bmd1.paletteMap(bmd1,bmd1.rect,new Point(),null,blurArr,greenArr);
上面的代码能让图片颜色反转。
21、perlinNoise() :柏林噪音,能模拟云彩,瀑布等纹理。
perlinNoise(baseX:Number, baseY:Number, numOctaves:uint, randomSeed:int, stitch:Boolean, fractalNoise:Boolean, channelOptions:uint = 7, grayScale:Boolean = false, offsets:Array = null)
参数说明:
baseX 和 baseY :在X和Y轴方向生成的纹理大小。
numOctaves:数字八度音阶,作用是生成纹理的层数,注意:层数越多,图像越细腻,但渲染速度越慢。
randomSeed:伪随机种子:解释过好多遍了,相同的种子生成的纹理是相同的,所以说这样的纹理并不是真正意义上的随机。
stitch:一个布尔值。 如果该值为 true,则该方法将尝试平滑图像的转变边缘以创建无缝的纹理,用于作为位图填充进行平铺。
fractalNoise:Boolean — 一个布尔值。 如果该值为 true,则该方法将生成碎片杂点(即云彩效果);否则,它将生成湍流。 带有湍流的图像具有可见的不连续性渐变,可以使其具有更接近锐化的视觉效果,例如火焰或海浪。
channelOptions:uint (default = 7) — 一个数字,可以是四个颜色通道值(BitmapDataChannel.RED、BitmapDataChannel.BLUE、BitmapDataChannel.GREEN 和 BitmapDataChannel.ALPHA)的任意组合。 您可以使用逻辑 OR 运算符(|)来组合通道值。
grayScale:是否是灰度图像;
offsets:Array (default = null) — 与每个 octave 的 x 和 y 偏移量相对应的点数组。 通过操作这些偏移量值,您可以平滑滚动 perlinNoise 图像的图层。 偏移数组中的每个点将影响一个特定的 octave 杂点函数。(注意:这里的数组长度应该和数字八度音阶的层数相等,它们是一一对应的,用相同的伪随机种子,不断的改变offsets偏移量,再不断的使用该方法,纹理就会产生运动的漂亮效果)
22、pixelDissolve () :像素溶解
pixelDissolve(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, randomSeed:int = 0, numPixels:int = 0, fillColor:uint = 0):int
参数说明:
sourceBitmapData:源位图数据:可以是当前位图,也可以是别的位图数据;
randomSeed:伪随机种子(特别需要提醒一下:访方法有一个返回值int,使用该方法的返回值作为种子将让你更“顺利”的完成溶解)。
numPixels:每次执行该方法能够溶解多少像素。
fillColor:溶解时用什么颜色的像素填充(仅限于sourceBitmapData是当前位图);
特别说明:怎样判断像素已经溶解完毕:
用当前bitmapData的总像素除以numPixels(每次溶解的像素)=需要溶解的次数。
但是这有一个非常重要的前提就是每次调用方法的种子必须是上次方法结束时返回的值,如:
var i:int=100;//刚开始可以随便给它一个种子
dissolve(i);//注意,这个方法需要用Timer类反复执行,执行的次数上面有述,次处不再重复。
function dissolve(randomNum:Number):void {
var rect:Rectangle = bmd.rect;
var pt:Point = new Point(0, 0);
var numberOfPixels:uint = 1000;
i=bmd.pixelDissolve(bmd1, rect, pt, randomNum, numberOfPixels);//把方法执行的结果赋值给i
}
23、scroll(x,y) :滚动,又是一个做特效的好方法:
比如:下面是给一下BitmapData滚动两次后的效果:
bmd1.scroll(30,30);//X,Y轴同时滚动30个像素。也可以只滚动X轴或只滚动Y轴。
bmd1.scroll(30,30);//试试用enterFrame让它不停的滚动很小的像素。
精通BitmapData的更多相关文章
- BitmapData类介绍
今天介绍另外一个比较常用和中高级难度的类:BitmapData 用好这个类,可以说是半支脚踏入了Flash高手的大门···(主要是不是太多的人精通这个··呵呵··)我也可以趁这篇文章的机会好好巩固+学 ...
- <程序员从入门到精通> -- How
定位 自己才是职业生涯的管理者,想清楚自己的发展路径: 远期的理想是什么?近期的规划是什么?今日的任务和功课又是什么? 今日之任务或功课哪些有助于近期之规划的实现,而近期之规划是否有利于远期之理想? ...
- 精通Perl(第2版)
精通Perl(第2版)(通往Perl大师之路必读经典书籍,体现了一种编程思维,能够帮你解决很多实际的问题) [美]brian d foy(布瑞恩·D·福瓦)著 王兴宇 刘宸宇 译 ISBN 978 ...
- <精通JavaScript>---阅读笔记01
下面是阅读精通JavaScript书做的相关笔记. JS中的函数重载 函数重载必须依赖两件事情:判断传入参数数量的能力和判断传入参数类型的能力,在js中每个函数都带有一个仅在这个函数范围内作用的变量, ...
- 【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目 目录索引
索引 [无私分享:从入门到精通ASP.NET MVC]从0开始,一起搭框架.做项目(1)搭建MVC环境 注册区域 [无私分享:从入门到精通ASP.NET MVC]从0开始,一起搭框架.做项目(2)创建 ...
- ASP.NET MVC4入门到精通系列目录汇总
序言 最近公司在招.NET程序员,我发现好多来公司面试的.NET程序员居然都没有 ASP.NET MVC项目经验,其中包括一些工作4.5年了,甚至8年10年的,许多人给我的感觉是:工作了4.5年,We ...
- 精通Web Analytics 2.0 (11) 第九章: 新兴分析—社交,移动和视频
精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第九章: 新兴分析-社交,移动和视频 网络在过去几年中发生了不可思议的发展变化:从单向对话到双向对话的转变; 由视频,Ajax和 ...
- 精通Web Analytics 2.0 (10) 第八章:竞争情报分析
精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第八章:竞争情报分析 在现实世界中,收集竞争情报可能意味着雇人在竞争对手的垃圾桶(实际会发生!)翻找. 在虚拟世界中,堆如山的数 ...
- 精通Web Analytics 2.0 (9) 第七章:失败更快:爆发测试与实验的能量
精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第七章:失败更快:爆发测试与实验的能量 欢迎来到实验和测试这个棒极了的世界! 如果Web拥有一个超越所有其他渠道的巨大优势,它就 ...
随机推荐
- FALSE_IT
本文讲一个实用的语法糖(suger),很不错,攻克了我实际工作中的问题. 如果你写了这样一个类: class Executor { int step1(); void step2(); int ste ...
- C# 通过Hook的方法 屏蔽快捷键
#region 屏蔽Windows功能键(快捷键) public delegate int HookProc(int nCode, int wParam, IntPtr lParam ...
- A20 Android 编译
cd lichee ./build.sh -p sun7i_android -b wing-sc3075gs cd ../android4.2 . build/envsetup.sh lunch wi ...
- maven命令学习-发布上传jar包-deploy
Maven学习六之利用mvn deploy命令上传包 转http://blog.csdn.net/woshixuye/article/details/8133050 mvn:deploy在整合或者发布 ...
- PHP 7.1.5编译安装
1. 安装基础组件 yum install -y libxml2 libxml2-devel bzip2 bzip2-devel curl-devel libjpeg libjpeg-devel li ...
- Git Xcode配置
本文转载至 http://www.cnblogs.com/imzzk/p/xcode_git.html 感谢作者分享 Git源代码管理工具的出现,使得我们开发人员对于源码的管理更加方便快捷.至于Git ...
- mybatis入门(七)
mybatis入门--添加一个用户 //添加用户 @Test public void insertUserTest() throws IOException { // 通过工厂得到SqlSession ...
- iOS中版本号的获取及其意义
//对应的是发布的版本号,也就是build #define APP_VERSION [[[NSBundle mainBundle] infoDictionary] objectForKey:@&quo ...
- UITextInputMode类的使用
转载请注明:http://blog.sina.com.cn/s/blog_69081e060100v7ad.html UITextInputMode大家看了是不是有些陌生呢?这个类是在4.2之后才 ...
- javascript ajax和jquery ajax
一 进行ajax步骤: 1 获取dom值 2发送ajax请求 3返回成功进行前端逻辑处理 二 原生javascript的ajax <!DOCTYPE html> <html> ...