包 | flash.display |
类 | public class BitmapData |
继承 | BitmapData Object |
实现 | IBitmapDrawable |
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
flash.display.Loader
类加载的位图图像的 BitmapData。
此类允许您将位图呈现操作与 Flash Player 的内部显示更新例程分隔开来。通过直接操作 BitmapData 对象,您可以创建复杂的图像,不会因连续重新绘制矢量数据的内容而产生每帧开销。
BitmapData 类的方法支持通过可用于非位图显示对象的滤镜无法得到的效果。
BitmapData 对象包含像素数据的数组。此数据可以表示完全不透明的位图,或表示包含 Alpha 通道数据的透明位图。以上任一类型的 BitmapData 对象都作为 32 位整数的缓冲区进行存储。每个 32 位整数确定位图中单个像素的属性。
每个 32 位整数都是四个 8 位通道值(从 0 到 255)的组合,这些值描述像素的 Alpha 透明度以及红色、绿色、蓝色 (ARGB) 值。(对于 ARGB 值,最高有效字节代表 Alpha 通道值,其后的有效字节分别代表红色、绿色和蓝色通道值。)
将这四个通道(Alpha、红色、绿色和蓝色)与 BitmapData.copyChannel()
方法或 DisplacementMapFilter.componentX
及 DisplacementMapFilter.componentY
属性一起使用时,这些通道以数字形式表示,并且这些数字在 BitmapDataChannel 类中由以下常量表示:
BitmapDataChannel.ALPHA
BitmapDataChannel.RED
BitmapDataChannel.GREEN
BitmapDataChannel.BLUE
通过使用 Bitmap 对象的 bitmapData
属性,可以将 BitmapData 对象附加到 Bitmap 对象。
可以使用 Graphics.beginBitmapFill()
方法用 BitmapData 对象填充 Graphics 对象。
在 AIR 运行时中,DockIcon、Icon、InteractiveIcon 和 SystemTrayIcon 类中的每个类都包括一个 bitmaps
属性,该属性是定义图标的位图图像的 BitmapData 对象的数组。
在 AIR 1.5 和 Flash Player 10 中,BitmapData 对象的最大宽度或高度为 8,192 像素,并且像素总数不能超过 16,777,216 像素。(因此,如果 BitmapData 对象的宽度为 8,192 像素,则其高度只能为 2,048 像素。)在 Flash Player 9 及早期版本和 AIR 1.1 及早期版本中,高度最大为 2,880 像素,宽度最大为 2,880 像素。
如果 BitmapData 对象无效(例如,如果它的 height == 0
且 width == 0
),或者已通过 dispose() 处理了该对象,则对 BitmapData 对象的任何方法或属性的调用都会引发 ArgumentError 错误。
另请参见
属性 | 定义方 | ||
---|---|---|---|
constructor : Object
对类对象或给定对象实例的构造函数的引用。 | Object | ||
height : int [只读 (read-only)] 位图图像的高度,以像素为单位。 | BitmapData | ||
prototype : Object [静态]
对类或函数对象的原型对象的引用。 | Object | ||
rect : Rectangle [只读 (read-only)] 定义位图图像大小和位置的矩形。 | BitmapData | ||
transparent : Boolean [只读 (read-only)] 定义位图图像是否支持每个像素具有不同的透明度。 | BitmapData | ||
width : int [只读 (read-only)] 位图图像的宽度,以像素为单位。 | BitmapData |
方法 | 定义方 | ||
---|---|---|---|
创建一个具有指定的宽度和高度的 BitmapData 对象。 | BitmapData | ||
applyFilter(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, filter:BitmapFilter):void 取得一个源图像和一个滤镜对象,并生成过滤的图像。 | BitmapData | ||
返回一个新的 BitmapData 对象,它是对原始实例的克隆,包含与原始实例所含位图完全相同的副本。 | BitmapData | ||
使用 ColorTransform 对象调整位图图像的指定区域中的颜色值。 | BitmapData | ||
比较两个 BitmapData 对象。 | BitmapData | ||
copyChannel(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, sourceChannel:uint, destChannel:uint):void 将数据从另一个 BitmapData 对象或当前 BitmapData 对象的一个通道传输到当前 BitmapData 对象的某个通道中。 | BitmapData | ||
copyPixels(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, alphaBitmapData:BitmapData = null, alphaPoint:Point = null, mergeAlpha:Boolean = false):void 为没有拉伸、旋转或色彩效果的图像之间的像素处理提供一个快速例程。 | BitmapData | ||
释放用来存储 BitmapData 对象的内存。 | BitmapData | ||
draw(source:IBitmapDrawable, matrix:Matrix = null, colorTransform:ColorTransform = null, blendMode:String = null, clipRect:Rectangle = null, smoothing:Boolean = false):void 使用 Flash Player 或 AIR 矢量渲染器在位图图像上绘制 source 显示对象。 | BitmapData | ||
使用指定的 ARGB 颜色填充一个矩形像素区域。 | BitmapData | ||
对图像执行倾倒填充操作,从 (x, y) 坐标开始,填充一种特定的颜色。 | BitmapData | ||
已知 BitmapData 对象、源矩形和滤镜对象,确定 applyFilter() 方法调用所影响的目标矩形。 | BitmapData | ||
确定矩形区域是将位图图像中指定颜色的所有像素完全包括起来(如果将 findColor 参数设置为 true),还是将不包括指定颜色的所有像素完全包括起来(如果将 findColor 参数设置为 false)。 | BitmapData | ||
返回一个整数,它表示 BitmapData 对象中在特定点 (x, y) 处的 RGB 像素值。 | BitmapData | ||
返回一个 ARGB 颜色值,它包含 Alpha 通道数据和 RGB 数据。 | BitmapData | ||
从像素数据的矩形区域生成一个字节数组。 | BitmapData | ||
从像素数据的矩形区域生成一个矢量数组。 | BitmapData | ||
指示对象是否已经定义了指定的属性。 | Object | ||
计算 BitmapData 对象的 256 值二进制数直方图。 | BitmapData | ||
hitTest(firstPoint:Point, firstAlphaThreshold:uint, secondObject:Object, secondBitmapDataPoint:Point = null, secondAlphaThreshold:uint = 1):Boolean 在一个位图图像与一个点、矩形或其它位图图像之间执行像素级的点击检测。 | BitmapData | ||
指示 Object 类的实例是否在指定为参数的对象的原型链中。 | Object | ||
锁定图像,以使引用 BitmapData 对象的任何对象(如 Bitmap 对象)在此 BitmapData 对象更改时不会更新。 | BitmapData | ||
merge(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, redMultiplier:uint, greenMultiplier:uint, blueMultiplier:uint, alphaMultiplier:uint):void 对每个通道执行从源图像向目标图像的混合。 | BitmapData | ||
noise(randomSeed:int, low:uint = 0, high:uint = 255, channelOptions:uint = 7, grayScale:Boolean = false):void 使用表示随机杂点的像素填充图像。 | BitmapData | ||
paletteMap(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, redArray:Array = null, greenArray:Array = null, blueArray:Array = null, alphaArray:Array = null):void 重新映射一个具有最多四组调色板数据(每个通道一组)的图像中的颜色通道值。 | BitmapData | ||
perlinNoise(baseX:Number, baseY:Number, numOctaves:uint, randomSeed:int, stitch:Boolean, fractalNoise:Boolean, channelOptions:uint = 7, grayScale:Boolean = false, offsets:Array = null):void 生成 Perlin 杂点图像。 | BitmapData | ||
pixelDissolve(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, randomSeed:int = 0, numPixels:int = 0, fillColor:uint = 0):int 执行源图像到目标图像的像素溶解,或使用同一图像执行像素溶解。 | BitmapData | ||
指示指定的属性是否存在、是否可枚举。 | Object | ||
按某一 (x, y) 像素量滚动图像。 | BitmapData | ||
设置 BitmapData 对象的单个像素。 | BitmapData | ||
设置 BitmapData 对象单个像素的颜色和 Alpha 透明度值。 | BitmapData | ||
将字节数组转换为像素数据的矩形区域。 | BitmapData | ||
设置循环操作动态属性的可用性。 | Object | ||
BitmapData | |||
threshold(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, operation:String, threshold:uint, color:uint = 0, mask:uint = 0xFFFFFFFF, copySource:Boolean = false):uint 根据指定的阈值测试图像中的像素值,并将通过测试的像素设置为新的颜色值。 | BitmapData | ||
返回指定对象的字符串表示形式。 | Object | ||
解除锁定图像,以使引用 BitmapData 对象的任何对象(如 Bitmap 对象)在此 BitmapData 对象更改时更新。 | BitmapData | ||
返回指定对象的原始值。 | Object |
height | 属性 |
height:int
[只读 (read-only)] 语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
位图图像的高度,以像素为单位。
public function get height():int
rect | 属性 |
rect:Rectangle
[只读 (read-only)] 语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
定义位图图像大小和位置的矩形。矩形的顶部和左侧为零;宽度和高度等于 BitmapData 对象的宽度和高度(以像素为单位)。
public function get rect():Rectangle
transparent | 属性 |
transparent:Boolean
[只读 (read-only)] 语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
定义位图图像是否支持每个像素具有不同的透明度。只有当通过为构造函数的 transparent
参数传入 true
来构造 BitmapData 对象时,才能设置此值。然后,在创建 BitmapData 对象之后,可以通过确定 transparent
属性的值是否为 true
来检查该对象是否支持每个像素具有不同的透明度。
public function get transparent():Boolean
width | 属性 |
width:int
[只读 (read-only)] 语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
位图图像的宽度,以像素为单位。
public function get width():int
BitmapData | () | 构造函数 |
public function BitmapData(width:int, height:int, transparent:Boolean = true, fillColor:uint = 0xFFFFFFFF)
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
创建一个具有指定的宽度和高度的 BitmapData 对象。如果为 fillColor
参数指定一个值,则位图中的每个像素都将设置为该颜色。
默认情况下,将位图创建为透明位图,除非您为 transparent
参数传递值 false
。创建了不透明位图后,将无法将其更改为透明位图。不透明位图中的每个像素仅使用 24 位的颜色通道信息。如果将位图定义为透明,则每个像素将使用 32 位的颜色通道信息,其中包括 Alpha 透明度通道。
在 AIR 1.5 和 Flash Player 10 中,BitmapData 对象的最大宽度或高度为 8,192 像素,并且像素总数不能超过 16,777,216 像素。(因此,如果 BitmapData 对象的宽度为 8,192 像素,则其高度只能为 2,048 像素。)在 Flash Player 9 及早期版本和 AIR 1.1 及早期版本中,高度最大为 2,880 像素,宽度最大为 2,880 像素。 如果指定的宽度值或高度值大于 2880,则不会创建新实例。
参数width:int — 位图图像的宽度,以像素为单位。 | |
height:int — 位图图像的高度,以像素为单位。 | |
transparent:Boolean (default = true ) —
指定位图图像是否支持每个像素具有不同的透明度。默认值为 true (透明)。若要创建完全透明的位图,请将 transparent 参数的值设置为 true ,将 fillColor 参数的值设置为 0x00000000(或设置为 0)。将 transparent 属性设置为 false 可以略微提升呈现性能。
| |
fillColor:uint (default = 0xFFFFFFFF ) — 用于填充位图图像区域的 32 位 ARGB 颜色值。默认值为 0xFFFFFFFF(纯白色)。 |
ArgumentError — 宽度和/或高度超过最大尺寸。 |
applyFilter | () | 方法 |
public function applyFilter(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, filter:BitmapFilter):void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
取得一个源图像和一个滤镜对象,并生成过滤的图像。
此方法依赖于内置滤镜对象的行为,这些对象确定受输入源矩形影响的目标矩形。
应用滤镜后,结果图像可能会大于输入图像。例如,如果使用 BlurFilter 类来模糊源矩形 (50,50,100,100),并且目标点为 (10,10),则在目标图像中更改的区域将会由于该模糊处理而大于 (10,10,60,60)。这会在 applyFilter()
调用过程中在内部发生。
如果 sourceBitmapData
参数的 sourceRect
参数是内部区域,如 200 x 200 图像中的 (50,50,100,100),则滤镜会使用 sourceRect
参数外部的源像素来生成目标矩形。
如果 BitmapData 对象和指定为 sourceBitmapData
参数的对象是同一对象,应用程序将使用该对象的临时副本来执行滤镜。为了获得最佳性能,请避免这种情况。
参数
sourceBitmapData:BitmapData — 要使用的输入位图图像。源图像可以是另一个 BitmapData 对象,也可以引用当前 BitmapData 实例。 | |
sourceRect:Rectangle — 定义要用作输入的源图像区域的矩形。 | |
destPoint:Point — 目标图像(当前 BitmapData 实例)中与源矩形的左上角对应的点。 | |
filter:BitmapFilter —
用于执行过滤操作的滤镜对象。每种滤镜都有某些要求,如下所示:
|
TypeError — sourceBitmapData、sourceRect、destPoint 或滤镜为空。 | |
IllegalOperationError — BitmapData 对象的透明度与滤镜操作不兼容。 |
另请参见
import flash.display.Bitmap; import flash.display.BitmapData; import flash.geom.Point; import flash.geom.Rectangle; import flash.filters.BlurFilter; var bmd:BitmapData = new BitmapData(80, 30, false, 0xFFCC00); var rect:Rectangle = new Rectangle(10, 10, 40, 10); bmd.fillRect(rect, 0xFF0000); var pt:Point = new Point(10, 10); var filter:BlurFilter = new BlurFilter(); bmd.applyFilter(bmd, rect, pt, filter); var bm:Bitmap = new Bitmap(bmd); addChild(bm);
clone | () | 方法 |
public function clone():BitmapData
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
返回一个新的 BitmapData 对象,它是对原始实例的克隆,包含与原始实例所含位图完全相同的副本。
返回BitmapData — 一个新的 BitmapData 对象,它与原始对象相同。 |
import flash.display.Bitmap; import flash.display.BitmapData; var bmd1:BitmapData = new BitmapData(100, 80, false, 0x00000000); var bmd2:BitmapData = bmd1.clone(); bmd1.setPixel32(1, 1, 0xFFFFFFFF); trace(bmd1.getPixel32(1, 1).toString(16)); // ffffffff trace(bmd2.getPixel32(1, 1).toString(16)); // ff000000 var bm1:Bitmap = new Bitmap(bmd1); this.addChild(bm1); var bm2:Bitmap = new Bitmap(bmd2); bm2.x = 110; this.addChild(bm2);
colorTransform | () | 方法 |
public function colorTransform(rect:Rectangle, colorTransform:ColorTransform):void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
使用 ColorTransform
对象调整位图图像的指定区域中的颜色值。如果矩形与位图图像的边界匹配,则此方法将转换整个图像的颜色值。
参数
rect:Rectangle — 一个 Rectangle 对象,它定义在其中应用 ColorTransform 对象的图像区域。 | |
colorTransform:ColorTransform — 一个 ColorTransform 对象,它描述要应用的颜色转换值。 |
TypeError — rect 或 colorTransform 为空。 |
另请参见
import flash.display.Bitmap; import flash.display.BitmapData; import flash.geom.Rectangle; import flash.geom.ColorTransform; var bmd:BitmapData = new BitmapData(80, 30, false, 0xFF0000); var cTransform:ColorTransform = new ColorTransform(); cTransform.alphaMultiplier = 0.5 var rect:Rectangle = new Rectangle(0, 0, 40, 30); bmd.colorTransform(rect, cTransform); var bm:Bitmap = new Bitmap(bmd); addChild(bm);
compare | () | 方法 |
public function compare(otherBitmapData:BitmapData):Object
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
比较两个 BitmapData 对象。如果两个 BitmapData 对象的尺寸(宽度和高度)相同,该方法将返回一个新的 BitmapData 对象,其中的每个像素都是两个源对象中的像素之间的“差”:
otherBitmapData
对象中的像素值)。本例中忽略了 Alpha 通道差异。
otherBitmapData
对象中的 Alpha 值)。
例如,考虑下面两个 BitmapData 对象:
var bmd1:BitmapData = new BitmapData(50, 50, true, 0xFFFF8800); var bmd2:BitmapData = new BitmapData(50, 50, true, 0xCCCC6600); var diffBmpData:BitmapData = bmd1.compare(bmd2) as BitmapData; trace ("0x" + diffBmpData.getPixel(0,0).toString(16); // 0x332200
var bmd1 = new air.BitmapData(50, 50, true, 0xFFFF0000); var bmd2 = new air.BitmapData(50, 50, true, 0xCCFFAA00); var diffBmpData = bmd1.compare(bmd2);
注意:用于填充这两个 BitmapData 对象的颜色具有略微不同的 RGB 值(0xFF0000 和 0xFFAA00)。compare()
方法的结果是一个新的 BitmapData 对象,其中的每个像素都显示两个位图之间 RGB 值的差异。
以下面两个 BitmapData 对象为例,其中 RGB 颜色相同,但 Alpha 值不同。
var bmd1:BitmapData = new BitmapData(50, 50, true, 0xFFFFAA00); var bmd2:BitmapData = new BitmapData(50, 50, true, 0xCCFFAA00); var diffBmpData:BitmapData = bmd1.compare(bmd2) as BitmapData; trace ("0x" + diffBmpData.getPixel32(0,0).toString(16); // 0x33ffffff
var bmd1 = new air.BitmapData(50, 50, true, 0xFFFFAA00); var bmd2 = new air.BitmapData(50, 50, true, 0xCCFFAA00); var diffBmpData = bmd1.compare(bmd2);
compare()
方法的结果是一个新的 BitmapData 对象,其中的每个像素都显示两个位图之间 Alpha 值的差异。
如果 BitmapData 对象相同(宽度、高度和像素值都相同),则方法返回数字 0。
如果这两个 BitmapData 对象的宽度不相等,则该方法返回数字 -3。
如果 BitmapData 对象的高度不相等,但宽度相同,则方法返回数字 -4。
以下示例比较两个具有不同宽度(50 和 60)的 Bitmap 对象:
var bmd1:BitmapData = new BitmapData(100, 50, false, 0xFFFF0000); var bmd2:BitmapData = new BitmapData(100, 60, false, 0xFFFFAA00); trace(bmd1.compare(bmd2)); // -4
var bmd1 = new air.BitmapData(100, 50, false, 0xFFFF0000); var bmd2 = new air.BitmapData(100, 60, false, 0xFFFFAA00); trace(bmd1.compare(bmd2)); // -4
参数
otherBitmapData:BitmapData — 要与源 BitmapData 对象比较的 BitmapData 对象。 |
Object — 如果两个 BitmapData 对象的尺寸(宽度和高度)相同,则方法将返回一个新的 BitmapData 对象,其中包含两个对象之间的差异(请参阅主要讨论内容)。如果这两个 BitmapData 对象相同,则该方法返回数字 0。如果这两个 BitmapData 对象的宽度不相等,则该方法返回数字 -3。如果这两个 BitmapData 对象的高度不相等,则该方法返回数字 -4。 |
TypeError — otherBitmapData 为空。 |
import flash.display.Bitmap; import flash.display.BitmapData; var bmd1:BitmapData = new BitmapData(50, 50, true, 0xFFFFAA00); var bmd2:BitmapData = new BitmapData(50, 50, true, 0xCCFFAA00); var diffBmpData:BitmapData = BitmapData(bmd1.compare(bmd2)); var diffValue:String = diffBmpData.getPixel32(1, 1).toString(16); trace (diffValue); // 33ffffff var bm1:Bitmap = new Bitmap(bmd1); addChild(bm1); var bm2:Bitmap = new Bitmap(bmd2); addChild(bm2); bm2.x = 60;
copyChannel | () | 方法 |
public function copyChannel(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, sourceChannel:uint, destChannel:uint):void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
将数据从另一个 BitmapData 对象或当前 BitmapData 对象的一个通道传输到当前 BitmapData 对象的某个通道中。目标 BitmapData 对象的其它通道中的所有数据都将被保留。
源通道值和目标通道值可以是下列值之一:
BitmapDataChannel.RED
BitmapDataChannel.GREEN
BitmapDataChannel.BLUE
BitmapDataChannel.ALPHA
参数
sourceBitmapData:BitmapData — 要使用的输入位图图像。源图像可以是另一个 BitmapData 对象,也可以指当前 BitmapData 对象。 | |
sourceRect:Rectangle — 源 Rectangle 对象。若只想复制位图内较小区域中的通道数据,请指定一个小于 BitmapData 对象整体大小的源矩形。 | |
destPoint:Point — 目标 Point 对象,它表示将要在其中放置新通道数据的矩形区域的左上角。若只想将通道数据从目标图像中的一个区域复制到其它区域,请指定一个 (0,0) 以外的点。 | |
sourceChannel:uint —
源通道。使用来自 BitmapDataChannel 类(BitmapDataChannel.RED 、BitmapDataChannel.BLUE 、BitmapDataChannel.GREEN 、BitmapDataChannel.ALPHA )的值。
| |
destChannel:uint —
目标通道。使用来自 BitmapDataChannel 类(BitmapDataChannel.RED 、BitmapDataChannel.BLUE 、BitmapDataChannel.GREEN 、BitmapDataChannel.ALPHA )的值。
|
TypeError — sourceBitmapData、sourceRect 或 destPoint 为空。 |
另请参见
import flash.display.Bitmap; import flash.display.BitmapData; import flash.geom.Rectangle; import flash.geom.Point; var bmd:BitmapData = new BitmapData(100, 80, false, 0x00FF0000); var rect:Rectangle = new Rectangle(0, 0, 20, 20); var pt:Point = new Point(10, 10); bmd.copyChannel(bmd, rect, pt, BitmapDataChannel.RED, BitmapDataChannel.BLUE); var bm:Bitmap = new Bitmap(bmd); this.addChild(bm);
copyPixels | () | 方法 |
public function copyPixels(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, alphaBitmapData:BitmapData = null, alphaPoint:Point = null, mergeAlpha:Boolean = false):void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
为没有拉伸、旋转或色彩效果的图像之间的像素处理提供一个快速例程。此方法在目标 BitmapData 对象的目标点将源图像的矩形区域复制为同样大小的矩形区域。
如果包括 alphaBitmap
参数和 alphaPoint
参数,则可以将另一个图像用作源图像的 Alpha 源。如果源图像具有 Alpha 数据,则这两组 Alpha 数据都用于将源图像中的像素组合到目标图像中。alphaPoint
参数是 Alpha 图像中与源矩形左上角对应的点。源图像和 Alpha 图像交叉区域之外的任何像素都不会被复制到目标图像。
mergeAlpha
属性控制在将透明图像复制到另一透明图像时是否使用 Alpha 通道。若要复制含有 Alpha 通道数据的像素,请将 mergeAlpha
属性设置为 true
。默认情况下,mergeAlpha
属性为 false
。
参数
sourceBitmapData:BitmapData — 要从中复制像素的输入位图图像。源图像可以是另一个 BitmapData 实例,也可以指当前 BitmapData 实例。 | |
sourceRect:Rectangle — 定义要用作输入的源图像区域的矩形。 | |
destPoint:Point — 目标点,它表示将在其中放置新像素的矩形区域的左上角。 | |
alphaBitmapData:BitmapData (default = null ) — 第二个 Alpha BitmapData 对象源。 | |
alphaPoint:Point (default = null ) —
Alpha BitmapData 对象源中与 sourceRect 参数的左上角对应的点。
| |
mergeAlpha:Boolean (default = false ) —
若要使用 Alpha 通道,请将该值设置为 true 。若要复制不含 Alpha 通道的像素,请将该值设置为 false 。
|
TypeError — sourceBitmapData、sourceRect 和 destPoint 为空。 |
import flash.display.Bitmap; import flash.display.BitmapData; import flash.geom.Rectangle; import flash.geom.Point; var bmd1:BitmapData = new BitmapData(40, 40, false, 0x000000FF); var bmd2:BitmapData = new BitmapData(80, 40, false, 0x0000CC44); var rect:Rectangle = new Rectangle(0, 0, 20, 20); var pt:Point = new Point(10, 10); bmd2.copyPixels(bmd1, rect, pt); var bm1:Bitmap = new Bitmap(bmd1); this.addChild(bm1); var bm2:Bitmap = new Bitmap(bmd2); this.addChild(bm2); bm2.x = 50;
dispose | () | 方法 |
public function dispose():void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
释放用来存储 BitmapData 对象的内存。
对图像调用 dispose()
方法时,该图像的宽度和高度将设置为 0。对此 BitmapData 实例的方法或属性的所有后续调用都将失败,并引发异常。
dispose()
方法后调用 BitmapData 对象的方法所产生的结果(引发异常):
import flash.display.BitmapData; var myBitmapData:BitmapData = new BitmapData(100, 80, false, 0x000000FF); trace(myBitmapData.getPixel(1, 1)); // 255 == 0xFF myBitmapData.dispose(); try { trace(myBitmapData.getPixel(1, 1)); } catch (error:Error) { trace(error); // ArgumentError }
draw | () | 方法 |
public function draw(source:IBitmapDrawable, matrix:Matrix = null, colorTransform:ColorTransform = null, blendMode:String = null, clipRect:Rectangle = null, smoothing:Boolean = false):void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
使用 Flash Player 或 AIR 矢量渲染器在位图图像上绘制 source
显示对象。Flash Player 或 AIR 矢量渲染器。可以指定 matrix
、colorTransform
、blendMode
和目标 clipRect
参数来控制呈现的执行方式。您可以根据需要指定是否应在缩放时对位图进行平滑处理(这只适用于源对象是 BitmapData 对象的情况)。
此方法与如何在创作工具界面中使用对象的标准矢量渲染器来绘制对像直接对应。
源显示对象不对此调用使用其任何已应用的转换。它会被视为存在于库或文件中,没有矩阵转换、没有颜色转换,也没有混合模式。若要使用对象自己的 transform 属性来绘制显示对象(如影片剪辑),可以将其 transform
属性对象复制到使用 BitmapData 对象的 Bitmap 对象的 transform
属性。
在 Flash Player 9.0.115.0 及更高版本和 Adobe AIR 中,通过 RTMP 支持此方法。在 Flash Media Server 上,可以在服务器端脚本中控制对流的访问。有关详细信息,请参阅 Server-Side ActionScript Language Reference for Adobe Flash Media Server (《Adobe Flash Media Server 服务器端 ActionScript 语言参考》)中的 Client.audioSampleAccess
和 Client.videoSampleAccess
属性。
如果 source 对象和其所有子对象(如果是 Sprite 或 MovieClip 对象)与调用方不来自同一个域,或者不在调用方可通过调用 Security.allowDomain()
方法访问的内容中,则调用 draw()
将引发 SecurityError 异常。此限制不适用于应用程序安全沙箱中的 AIR 内容。
对于使用所加载的位图图像作为 source
也有一些限制。如果所加载的图像来自与调用方相同的域,则调用 draw()
方法成功。此外,图像服务器上的跨域策略文件可以向调用 draw()
方法的 SWF 内容的域授予权限。在这种情况下,必须设置 LoaderContext 对象的 checkPolicyFile
属性,并在调用用于加载图像的 Loader 对象的 load()
方法时使用 LoaderContext 对象作为 context
参数。这些限制不适用于应用程序安全沙箱中的 AIR 内容。
在 Windows 中,draw()
方法无法在 Adobe AIR 的 HTMLLoader 对象中捕获嵌入 HTML 页的 SWF 内容。
draw()
方法无法捕获 Adobe AIR 中的 PDF 内容。也无法捕获 Adobe AIR
中 wmode
属性设置为 "window" 的 HTML 中嵌入的 SWF 内容。
参数
source:IBitmapDrawable — 要绘制到 BitmapData 对象的显示对象或 BitmapData 对象。(DisplayObject 和 BitmapData 类实现 IBitmapDrawable 接口。) | |
matrix:Matrix (default = null ) —
一个 Matrix 对象,用于缩放、旋转位图或转换位图的坐标。如果不想将矩阵转换应用于图像,请将此参数设置为恒等矩阵(使用默认 new Matrix() 构造函数创建),或传递 null 值。
| |
colorTransform:ColorTransform (default = null ) —
一个 ColorTransform 对象,用于调整位图的颜色值。如果没有提供任何对象,则不会转换位图图像的颜色。如果必须传递此参数但又不想转换图像,请将此参数设置为使用默认 new ColorTransform() 构造函数创建的 ColorTransform 对象。
| |
blendMode:String (default = null ) — 来自 flash.display.BlendMode 类的一个字符串值,指定要应用于所生成位图的混合模式。 | |
clipRect:Rectangle (default = null ) — 一个 Rectangle 对象,定义要绘制的源对象的区域。如果不提供此值,则不会进行剪裁,并且将绘制整个源对象。 | |
smoothing:Boolean (default = false ) —
一个布尔值,用于确定因在 matrix 参数中指定缩放或旋转而对 BitmapData 对象进行缩放或旋转以后,是否对该对象进行平滑处理。smoothing 参数只有在 source 参数是 BitmapData 对象时才适用。在将 smoothing 设置为 false 的情况下,经过旋转或缩放的 BitmapData 图像可能会显得像素化或带有锯齿。例如,下面两个图像的 source 参数使用同一个 BitmapData 对象,但对左侧的图像,smoothing 参数设置为 true ,对右侧的图像,该参数设置为 false :
在将 |
ArgumentError —
source 参数不是 BitmapData 或 DisplayObject 对象。
| |
SecurityError —
source 对象及其所有子对象(如果是 Sprite 或 MovieClip 对象)与调用方不来自同一个域,或者不在调用方可通过调用 Security.allowDomain() 方法访问的内容中。此限制不适用于应用程序安全沙箱中的 AIR 内容。
| |
ArgumentError — 源为空或不是有效的 IBitmapDrawable 对象。 |
另请参见
import flash.display.Bitmap; import flash.display.BitmapData; import flash.text.TextField; var tf:TextField = new TextField(); tf.text = "bitmap text"; var myBitmapData:BitmapData = new BitmapData(80, 20); myBitmapData.draw(tf); var bmp:Bitmap = new Bitmap(myBitmapData); this.addChild(bmp);
fillRect | () | 方法 |
public function fillRect(rect:Rectangle, color:uint):void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
使用指定的 ARGB 颜色填充一个矩形像素区域。
参数
rect:Rectangle — 要填充的矩形区域。 | |
color:uint — 用于填充区域的 ARGB 颜色值。通常以十六进制格式指定 ARGB 颜色;例如,0xFF336699。 |
TypeError — 矩形是空的。 |
另请参见
import flash.display.Bitmap; import flash.display.BitmapData; import flash.geom.Rectangle; var myBitmapData:BitmapData = new BitmapData(40, 40, false, 0x0000FF00); var rect:Rectangle = new Rectangle(0, 0, 20, 20); myBitmapData.fillRect(rect, 0x0000FF); var bm:Bitmap = new Bitmap(myBitmapData); addChild(bm);
floodFill | () | 方法 |
public function floodFill(x:int, y:int, color:uint):void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
对图像执行倾倒填充操作,从 (x, y) 坐标开始,填充一种特定的颜色。floodFill()
方法类似于各种绘图程序中的“颜料桶”工具。该颜色是包含 Alpha 信息和颜色信息的 ARGB 颜色。
参数
x:int —
图像的 x 坐标。
| |
y:int —
图像的 y 坐标。
| |
color:uint — 要用作填充色的 ARGB 颜色。 |
(10, 10)
定义的像素的区域,在该区域中所有颜色均与该点的颜色相匹配
import flash.display.Bitmap; import flash.display.BitmapData; import flash.geom.Rectangle; var myBitmapData:BitmapData = new BitmapData(40, 40, false, 0x0000FF00); var rect:Rectangle = new Rectangle(0, 0, 20, 20); myBitmapData.fillRect(rect, 0x000000FF); rect = new Rectangle(15, 15, 25, 25); myBitmapData.fillRect(rect, 0x000000FF); myBitmapData.floodFill(10, 10, 0x00FF0000); var bm:Bitmap = new Bitmap(myBitmapData); addChild(bm);
generateFilterRect | () | 方法 |
public function generateFilterRect(sourceRect:Rectangle, filter:BitmapFilter):Rectangle
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
已知 BitmapData 对象、源矩形和滤镜对象,确定 applyFilter()
方法调用所影响的目标矩形。
例如,模糊滤镜影响的区域通常比原始图像大。由一个默认 BlurFilter 实例过滤的 100 x 200 像素图像,其中 blurX = blurY = 4
将生成一个目标矩形 (-2,-2,104,204)
。generateFilterRect()
方法使您可以提前了解到此目标矩形的大小,以便能够在执行滤镜操作之前相应地调整目标图像的大小。
有些滤镜会基于源图像大小裁剪其目标矩形。例如,一个内部 DropShadow
不会生成比其源图像大的结果。在此 API 中,BitmapData 对象用作源范围而不是源 rect
参数。
参数
sourceRect:Rectangle — 一个矩形,它定义要用作输入的源图像的区域。 | |
filter:BitmapFilter — 一个滤镜对象,用于计算目标矩形。 |
Rectangle —
一个目标矩形,它是使用图像、sourceRect 参数和滤镜计算得到的。
|
TypeError — sourceRect 或滤镜为空。 |
generateFilterRect()
方法来确定模糊滤镜的结果将要占据的矩形区域。generateFilterRect()
方法的结果由 trace()
函数输出:
import flash.display.Bitmap; import flash.display.BitmapData; import flash.geom.Point; import flash.geom.Rectangle; import flash.filters.BlurFilter; var bmd:BitmapData = new BitmapData(80, 30, false, 0xFFCC00); var rect:Rectangle = new Rectangle(10, 10, 40, 10); bmd.fillRect(rect, 0xFF0000); var pt:Point = new Point(10, 10); var filter:BlurFilter = new BlurFilter(); trace(bmd.generateFilterRect(rect, filter)); // (x=8, y=8, w=44, h=14) bmd.applyFilter(bmd, rect, pt, filter); var bm:Bitmap = new Bitmap(bmd); addChild(bm);
generateFilterRect()
方法不会应用滤镜。调用 applyFilter()
方法来应用滤镜。
getColorBoundsRect | () | 方法 |
public function getColorBoundsRect(mask:uint, color:uint, findColor:Boolean = true):Rectangle
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
确定矩形区域是将位图图像中指定颜色的所有像素完全包括起来(如果将 findColor
参数设置为 true
),还是将不包括指定颜色的所有像素完全包括起来(如果将 findColor
参数设置为 false
)。
例如,如果有一个源图像并且想要确定包含非零 Alpha 通道的图像矩形,请传递 {mask: 0xFF000000, color: 0x00000000}
作为参数。如果 findColor
参数设置为 true
,则会在整个图像中搜索其 (value & mask) == color
的像素范围(其中 value
是像素的颜色值)。如果 findColor
参数设置为 false
,则在整个图像中搜索以下像素的范围,这些像素满足条件 (value & mask) != color
(其中 value
是像素的颜色值)。若要确定图像周围的空白区域,请传递 {mask: 0xFFFFFFFF, color: 0xFFFFFFFF}
以查找非空白像素的范围。
参数
mask:uint —
一个十六进制值,指定要考虑的 ARGB 颜色的位。通过使用 & (按位 AND)运算符,将颜色值与此十六进制值合并。
| |
color:uint —
一个十六进制值,指定要匹配(如果 findColor 设置为 true )或不 匹配(如果 findColor 设置为 false )的 ARGB 颜色。
| |
findColor:Boolean (default = true ) —
如果该值设置为 true ,则返回图像中颜色值的范围。如果该值设置为 false ,则返回图像中不存在此颜色的范围。
|
Rectangle — 指定颜色的图像区域。 |
getColorBoundsRect()
方法来确定其中像素为红色 (0xFF0000) 的矩形;最后,调用同一方法来确定其中像素不为红色的矩形(通过将 findColor
参数设置为 false
):
import flash.display.Bitmap; import flash.display.BitmapData; import flash.geom.Rectangle; var bmd:BitmapData = new BitmapData(80, 40, false, 0xFFFFFF); var rect:Rectangle = new Rectangle(0, 0, 80, 20); bmd.fillRect(rect, 0xFF0000); var maskColor:uint = 0xFFFFFF; var color:uint = 0xFF0000; var redBounds:Rectangle = bmd.getColorBoundsRect(maskColor, color, true); trace(redBounds); // (x=0, y=0, w=80, h=20) var notRedBounds:Rectangle = bmd.getColorBoundsRect(maskColor, color, false); trace(notRedBounds); // (x=0, y=20, w=80, h=20) var bm:Bitmap = new Bitmap(bmd); addChild(bm);
getPixel | () | 方法 |
public function getPixel(x:int, y:int):uint
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
返回一个整数,它表示 BitmapData 对象中在某个特定点 (x, y) 处的 RGB 像素值。getPixel()
方法将返回一个未经过相乘的像素值。没有返回任何 Alpha 信息。
BitmapData 对象中的所有像素都作为预乘颜色值进行存储。预乘图像像素具有已经与 Alpha 数据相乘的红色、绿色和蓝色通道值。例如,如果 Alpha 值为 0,则 RGB 通道的值也为 0,与它们未经过相乘的值无关。这种丢失数据的情况可能会在执行操作时导致一些问题。所有 BitmapData 方法都采用并返回未经过相乘的值。内部像素表示形式在其作为值返回之前从经过预乘的形式转换为未经过相乘的形式。在设置操作过程中,设置原始图像像素之前,像素值是经过预乘的。
参数
x:int —
像素的 x 位置。
| |
y:int —
像素的 y 位置。
|
uint —
一个表示 RGB 像素值的数字。如果 (x, y) 坐标在图像范围以外,则该方法返回 0。
|
另请参见
getPixel()
方法确定左上角像素中的颜色值:
import flash.display.BitmapData; var bmd:BitmapData = new BitmapData(80, 40, false, 0xFF0000); var pixelValue:uint = bmd.getPixel(1, 1); trace(pixelValue.toString(16)); // ff0000;
getPixel32 | () | 方法 |
public function getPixel32(x:int, y:int):uint
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
返回一个 ARGB 颜色值,它包含 Alpha 通道数据和 RGB 数据。此方法与 getPixel()
方法类似,后者返回没有 Alpha 通道数据的 RGB 颜色。
BitmapData 对象中的所有像素都作为预乘颜色值进行存储。预乘图像像素具有已经与 Alpha 数据相乘的红色、绿色和蓝色通道值。例如,如果 Alpha 值为 0,则 RGB 通道的值也为 0,与它们未经过相乘的值无关。这种丢失数据的情况可能会在执行操作时导致一些问题。所有 BitmapData 方法都采用并返回未经过相乘的值。内部像素表示形式在其作为值返回之前从经过预乘的形式转换为未经过相乘的形式。在设置操作过程中,设置原始图像像素之前,像素值是经过预乘的。
参数
x:int —
像素的 x 位置。
| |
y:int —
像素的 y 位置。
|
uint —
一个表示 ARGB 像素值的数字。如果 (x, y) 坐标在图像范围以外,则返回 0。
|
另请参见
getPixel32()
方法确定左上角像素中的颜色值,并随之确定每个颜色成分(Alpha、红色、绿色和蓝色)的十六进制值:
import flash.display.BitmapData; var bmd:BitmapData = new BitmapData(80, 40, true, 0xFF44AACC); var pixelValue:uint = bmd.getPixel32(1, 1); var alphaValue:uint = pixelValue >> 24 & 0xFF; var red:uint = pixelValue >> 16 & 0xFF; var green:uint = pixelValue >> 8 & 0xFF; var blue:uint = pixelValue & 0xFF; trace(alphaValue.toString(16)); // ff trace(red.toString(16)); // 44 trace(green.toString(16)); // aa trace(blue.toString(16)); // cc
getPixels | () | 方法 |
public function getPixels(rect:Rectangle):ByteArray
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
从像素数据的矩形区域生成一个字节数组。为每个像素将一个无符号整数(32 位未经相乘的像素值)写入字节数组。
参数
rect:Rectangle — 当前 BitmapData 对象中的一个矩形区域。 |
ByteArray — 表示给定矩形中的像素的 ByteArray。 |
TypeError — 矩形是空的。 |
另请参见
getPixels()
方法用 BitmapData 对象的像素值来填充 ByteArray 对象
import flash.display.BitmapData; import flash.geom.Rectangle; import flash.utils.ByteArray; var bmd:BitmapData = new BitmapData(80, 40, true); var seed:int = int(Math.random() * int.MAX_VALUE); bmd.noise(seed); var bounds:Rectangle = new Rectangle(0, 0, bmd.width, bmd.height); var pixels:ByteArray = bmd.getPixels(bounds);
getVector | () | 方法 |
public function getVector(rect:Rectangle):Vector.<uint>
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
从像素数据的矩形区域生成一个矢量数组。为指定矩形返回一个无符号整数(32 位未经相乘的像素值)的 Vector 对象。
参数
rect:Rectangle — 当前 BitmapData 对象中的一个矩形区域。 |
Vector.<uint> — 表示给定矩形的 Vector。 |
TypeError — 矩形是空的。 |
histogram | () | 方法 |
public function histogram(hRect:Rectangle = null):Vector.<Vector$Number>
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
计算 BitmapData 对象的 256 值二进制数直方图。此方法返回包含四个矢量的 Vector 对象。<Number> 个实例(四个包含数字对象的 Vector 对象)。这四个 Vector 实例依次表示红色、绿色、蓝色和 Alpha 成分。每个 Vector 实例包含从 0 到 255 这 256 个值,这些值表示各个成分值的填充计数。
参数
hRect:Rectangle (default = null ) — 要使用的 BitmapData 对象的区域。 |
Vector.<Vector$Number> |
hitTest | () | 方法 |
public function hitTest(firstPoint:Point, firstAlphaThreshold:uint, secondObject:Object, secondBitmapDataPoint:Point = null, secondAlphaThreshold:uint = 1):Boolean
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
在一个位图图像与一个点、矩形或其它位图图像之间执行像素级的点击检测。 根据定义,点击区域是指一个不透明像素或两个重叠的不透明像素上的点或矩形的重叠部分。在执行点击测试时,将不会考虑两个对象中任何一个对象的拉伸、旋转或其它变形。
如果某个图像是不透明图像,则此方法会将其视为完全不透明的矩形。两个图像必须是透明图像才能执行判断透明度的像素级点击测试。当您在测试两个透明图像时,Alpha 阈值参数将控制哪些 Alpha 通道值(从 0 到 255)将被视为是不透明的。
参数
firstPoint:Point —
任意坐标空间中 BitmapData 图像的左上角的位置。在定义 secondBitmapPoint 参数时,使用了相同的坐标空间。
| |
firstAlphaThreshold:uint — 最小的 Alpha 通道值,此点击测试将其视为不透明的。 | |
secondObject:Object — 一个 Rectangle、Point、Bitmap 或 BitmapData 对象。 | |
secondBitmapDataPoint:Point (default = null ) —
一个点,用于定义第二个 BitmapData 对象中的一个像素位置。仅当 secondObject 的值是 BitmapData 对象时使用此参数。
| |
secondAlphaThreshold:uint (default = 1 ) —
最小的 Alpha 通道值,它在第二个 BitmapData 对象中被视为不透明的。仅当 secondObject 的值是 BitmapData 对象,并且这两个 BitmapData 对象都为透明时使用此参数。
|
Boolean —
如果发生点击,则值为 true ;否则为 false 。
|
ArgumentError —
secondObject 参数不是 Point、Rectangle、Bitmap 或 BitmapData 对象。
| |
TypeError — firstPoint 为空。 |
hitTest()
方法,且使用 Point 对象作为 secondObject
。在第一次调用中,Point 对象定义 BitmapData 对象的左上角,是透明的;在第二次调用中,Point 对象定义 BitmapData 对象的中心,是不透明的。
import flash.display.BitmapData; import flash.geom.Rectangle; import flash.geom.Point; var bmd1:BitmapData = new BitmapData(80, 80, true, 0x00000000); var rect:Rectangle = new Rectangle(20, 20, 40, 40); bmd1.fillRect(rect, 0xFF0000FF); var pt1:Point = new Point(1, 1); trace(bmd1.hitTest(pt1, 0xFF, pt1)); // false var pt2:Point = new Point(40, 40); trace(bmd1.hitTest(pt1, 0xFF, pt2)); // true
lock | () | 方法 |
public function lock():void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
锁定图像,以使引用 BitmapData 对象的任何对象(如 Bitmap 对象)在此 BitmapData 对象更改时不会更新。若要提高性能,请在对 setPixel()
或 setPixel32()
方法进行多次调用之前和之后使用此方法及 unlock()
方法。
另请参见
picture
的 bitmapData
属性创建一个 BitmapData 对象。然后,该示例先调用 lock()
方法再调用复杂的自定义函数 complexTransformation()
,该函数可修改 BitmapData 对象。(picture
对象和 complexTransformation()
函数未在本示例中定义。) 即使 complexTransformation()
函数更新了 picture
对象的 bitmapData
属性,这些更新也只有在代码对 bitmapData
对象调用 unlock()
方法之后才会得到体现:
import flash.display.BitmapData; var bitmapData:BitmapData = picture.bitmapData; bitmapData.lock(); bitmapData = complexTransformation(bitmapData); bitmapData.unlock(); picture.bitmapData = bitmapData;
merge | () | 方法 |
public function merge(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, redMultiplier:uint, greenMultiplier:uint, blueMultiplier:uint, alphaMultiplier:uint):void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
对每个通道执行从源图像向目标图像的混合。对于每个通道和每个像素,将基于源和目标像素的通道值来计算新值。例如,在红色通道中,新值是按如下方式计算的(其中 redSrc
是源图像中像素的红色通道值,而 redDest
是目标图像中对应像素的红色通道值):
new redDest = [(redSrc * redMultiplier) + (redDest * (256 - redMultiplier))] / 256;
redMultiplier
、greenMultiplier
、blueMultiplier
和 alphaMultiplier
值是用于每个颜色通道的乘数。应使用从 0
到 0x100
(256) 的十六进制值范围,其中 0
指定在结果中使用来自目标的完整值,0x100
指定使用来自源的完整值,介于两者之间的数字指定使用混合值 (如 0x80
表示 50%)。
参数
sourceBitmapData:BitmapData — 要使用的输入位图图像。源图像可以是另一个 BitmapData 对象,也可以引用当前 BitmapData 对象。 | |
sourceRect:Rectangle — 定义要用作输入的源图像区域的矩形。 | |
destPoint:Point — 目标图像(当前 BitmapData 实例)中与源矩形的左上角对应的点。 | |
redMultiplier:uint — 一个要与红色通道值相乘的十六进制 uint 值。 | |
greenMultiplier:uint — 一个要与绿色通道值相乘的十六进制 uint 值。 | |
blueMultiplier:uint — 一个要与蓝色通道值相乘的十六进制 uint 值。 | |
alphaMultiplier:uint — 一个要与 Alpha 透明度值相乘的十六进制 uint 值。 |
TypeError — sourceBitmapData、sourceRect 或 destPoint 为空。 |
merge()
方法,将第二个 BitmapData 对象的像素合并到第一个 BitmapData 对象中,但仅在指定矩形区域上进行:
import flash.display.Bitmap; import flash.display.BitmapData; import flash.geom.Rectangle; import flash.geom.Point; var bmd1:BitmapData = new BitmapData(100, 80, true, 0xFF00FF00); var bmd2:BitmapData = new BitmapData(100, 80, true, 0xFFFF0000); var rect:Rectangle = new Rectangle(0, 0, 20, 20); var pt:Point = new Point(20, 20); var mult:uint = 0x80; // 50% bmd1.merge(bmd2, rect, pt, mult, mult, mult, mult); var bm1:Bitmap = new Bitmap(bmd1); addChild(bm1); var bm2:Bitmap = new Bitmap(bmd2); addChild(bm2); bm2.x = 110;
noise | () | 方法 |
public function noise(randomSeed:int, low:uint = 0, high:uint = 255, channelOptions:uint = 7, grayScale:Boolean = false):void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
使用表示随机杂点的像素填充图像。
参数
randomSeed:int — 要使用的随机种子数。如果您保持使所有其它参数不变,可以通过改变随机种子值来生成不同的伪随机结果。杂点函数是一个映射函数,不是真正的随机数生成函数,所以它每次都会根据相同的随机种子创建相同的结果。 | |
low:uint (default = 0 ) — 要为每个通道生成的最低值(0 到 255)。 | |
high:uint (default = 255 ) — 要为每个通道生成的最高值(0 到 255)。 | |
channelOptions:uint (default = 7 ) —
一个数字,可以是四个颜色通道值(BitmapDataChannel.RED 、BitmapDataChannel.BLUE 、BitmapDataChannel.GREEN 和 BitmapDataChannel.ALPHA )的任意组合。您可以使用逻辑 OR 运算符(| )来组合通道值。
| |
grayScale:Boolean (default = false ) —
一个布尔值。如果该值为 true ,则会通过将所有颜色通道设置为相同的值来创建一个灰度图像。将此参数设置为 true 不会影响 Alpha 通道的选择。
|
另请参见
noise()
方法。但是,对于第一个对象的 noise()
方法的调用,grayscale
参数设置为 false
,而对于第二个对象的 noise()
方法的调用,该参数设置为 true
:
import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.BitmapDataChannel; var bmd1:BitmapData = new BitmapData(80, 80); var bmd2:BitmapData = new BitmapData(80, 80); var seed:int = int(Math.random() * int.MAX_VALUE); bmd1.noise(seed, 0, 0xFF, BitmapDataChannel.RED, false); bmd2.noise(seed, 0, 0xFF, BitmapDataChannel.RED, true); var bm1:Bitmap = new Bitmap(bmd1); this.addChild(bm1); var bm2:Bitmap = new Bitmap(bmd2); this.addChild(bm2); bm2.x = 90;
paletteMap | () | 方法 |
public function paletteMap(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, redArray:Array = null, greenArray:Array = null, blueArray:Array = null, alphaArray:Array = null):void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
重新映射一个具有最多四组调色板数据(每个通道一组)的图像中的颜色通道值。
Flash Player 或 AIR 使用以下步骤生成结果图像:
redArray
、greenArray
、blueArray
和 alphaArray
。这四个数组中的每一个都应包含 256 个值。
此方法可以支持跨通道效果。每个输入数组可以包含完整的 32 位值,并且在将这些值相加到一起时不会发生任何移位。此例程不支持按通道锁定。
如果没有为通道指定数组,则颜色通道会从源图像复制到目标图像。
您可以为多种效果(例如,常规调色板映射)使用此方法(采用一个通道并将其转换为假颜色图像)。您也可以为各种高级颜色操作算法(例如,灰度系数、曲线、级别和量化)使用此方法。
参数
sourceBitmapData:BitmapData — 要使用的输入位图图像。源图像可以是另一个 BitmapData 对象,也可以引用当前 BitmapData 实例。 | |
sourceRect:Rectangle — 定义要用作输入的源图像区域的矩形。 | |
destPoint:Point — 目标图像(当前 BitmapData 对象)中与源矩形的左上角对应的点。 | |
redArray:Array (default = null ) —
如果 redArray 不为 null ,则 red = redArray[source red value] else red = source rect value 。
| |
greenArray:Array (default = null ) —
如果 greenArray 不为 null ,则 green = greenArray[source green value] else green = source green value.
| |
blueArray:Array (default = null ) —
如果 blueArray 不为 null ,则 blue = blueArray[source blue value] else blue = source blue value 。
| |
alphaArray:Array (default = null ) —
如果 alphaArray 不为 null ,则 alpha = alphaArray[source alpha value] else alpha = source alpha value 。
|
TypeError — sourceBitmapData、sourceRect 或 destPoint 为空。 |
paletteMap()
方法在 BitmapData 对象的下半部分的矩形中将红色与绿色交换:
import flash.display.Bitmap; import flash.display.BitmapData; import flash.geom.Rectangle; import flash.geom.Point; var myBitmapData:BitmapData = new BitmapData(80, 80, false, 0x00FF0000); myBitmapData.fillRect(new Rectangle(20, 20, 40, 40), 0x0000FF00); var redArray:Array = new Array(256); var greenArray:Array = new Array(256); for(var i:uint = 0; i < 255; i++) { redArray[i] = 0x00000000; greenArray[i] = 0x00000000; } redArray[0xFF] = 0x0000FF00; greenArray[0xFF] = 0x00FF0000; var bottomHalf:Rectangle = new Rectangle(0, 0, 100, 40); var pt:Point = new Point(0, 0); myBitmapData.paletteMap(myBitmapData, bottomHalf, pt, redArray, greenArray); var bm1:Bitmap = new Bitmap(myBitmapData); addChild(bm1);
perlinNoise | () | 方法 |
public function perlinNoise(baseX:Number, baseY:Number, numOctaves:uint, randomSeed:int, stitch:Boolean, fractalNoise:Boolean, channelOptions:uint = 7, grayScale:Boolean = false, offsets:Array = null):void
运行时版本: | AIR 1.0 Flash Player 9 |
生成 Perlin 杂点图像。
Perlin 杂点生成算法会内插单个随机杂点函数名为 octave 并将它们组合成一个函数,该函数生成多个看起来很自然的随机杂点。就像音乐上的八音度,每个 octave 函数的频率都是其前面一个 octave 函数频率的两倍。Perlin 杂点被描述为“杂点的碎片总和”,因为它将多组杂点数据与不同级别的细节组合在一起。
您可以使用 Perlin 杂点函数来模拟自然现象和风景,例如,木材纹理、云彩或山脉。在大多数情况下,Perlin 杂点函数的输出不会直接显示出来,而是用于增强其它图像并为其它图像提供伪随机变化。
简单的数字随机杂点函数通常生成具有粗糙的对比度点的图像。这种粗糙的对比度在自然界中通常是找不到的。Perlin 杂点算法混合了在不同的详细级别上进行操作的多个杂点函数。此算法在相邻的像素值间产生较小的变化。
注意:Perlin 杂点算法是以 Ken Perlin 命名的,他在为 1982 年的影片 Tron 生成了计算机图形后开发了该算法。1997 年,Perlin 因 Perlin 杂点函数而获得了科技成就学院奖。
参数
baseX:Number —
要在 x 方向上使用的频率。例如,若要生成大小适合 64 x 128 图像的杂点,请为 baseX 值传递 64。
| |
baseY:Number —
要在 y 方向上使用的频率。例如,若要生成大小适合 64 x 128 图像的杂点,请为 baseY 值传递 128。
| |
numOctaves:uint — 要组合以创建此杂点的 octave 函数或各个杂点函数的数目。octave 的数目越多,创建的图像越细腻。octave 的数目越多,需要的处理时间也会越长。 | |
randomSeed:int — 要使用的随机种子数。如果您保持使所有其它参数不变,可以通过改变随机种子值来生成不同的伪随机结果。Perlin 杂点函数是一个映射函数,不是真正的随机数生成函数,所以它会每次根据相同的随机种子创建相同的结果。 | |
stitch:Boolean —
一个布尔值。如果该值为 true ,则该方法将尝试平滑图像的转变边缘以创建无缝的纹理,用于作为位图填充进行平铺。
| |
fractalNoise:Boolean —
一个布尔值。如果该值为 true ,则该方法将生成碎片杂点;否则,它将生成湍流。带有湍流的图像具有可见的不连续性渐变,可以使其具有更接近锐化的视觉效果,例如火焰或海浪。
| |
channelOptions:uint (default = 7 ) —
一个数字,可以是四个颜色通道值(BitmapDataChannel.RED 、BitmapDataChannel.BLUE 、BitmapDataChannel.GREEN 和 BitmapDataChannel.ALPHA )的任意组合。您可以使用逻辑 OR 运算符(| )来组合通道值。
| |
grayScale:Boolean (default = false ) —
一个布尔值。如果该值为 true ,则通过将红色、绿色和蓝色通道的每一个值都设置为相同的值来创建一个灰度图像。如果此值设置为 true ,则 Alpha 通道值将不会受到影响。
| |
offsets:Array (default = null ) —
与每个 octave 的 x 和 y 偏移量相对应的点数组。通过操作这些偏移量值,您可以平滑滚动 perlinNoise 图像的图层。偏移数组中的每个点将影响一个特定的 octave 杂点函数。
|
perlinNoise()
方法来生成红色和蓝色的水彩画效果:
import flash.display.Bitmap; import flash.display.BitmapData; var bmd:BitmapData = new BitmapData(200, 200, false, 0x00CCCCCC); var seed:Number = Math.floor(Math.random() * 10); var channels:uint = BitmapDataChannel.RED | BitmapDataChannel.BLUE; bmd.perlinNoise(100, 80, 6, seed, false, true, channels, false, null); var bm:Bitmap = new Bitmap(bmd); addChild(bm);
pixelDissolve | () | 方法 |
public function pixelDissolve(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, randomSeed:int = 0, numPixels:int = 0, fillColor:uint = 0):int
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
执行源图像到目标图像的像素溶解,或使用同一图像执行像素溶解。Flash Player 或 AIR 使用 randomSeed
值生成随机像素溶解。函数的返回值必须在后续调用中传入才能继续进行像素溶解,直至完成。
如果源图像不等于目标图像,则会使用所有的属性将像素从源复制到目标。此过程允许从空白图像溶解到完全填充的图像。
如果源图像和目标图像相等,则使用 color
参数填充像素。此过程允许从完全填充的图像溶解掉。在此模式中,将会忽略目标 point
参数。
参数
sourceBitmapData:BitmapData — 要使用的输入位图图像。源图像可以是另一个 BitmapData 对象,也可以引用当前 BitmapData 实例。 | |
sourceRect:Rectangle — 定义要用作输入的源图像区域的矩形。 | |
destPoint:Point — 目标图像(当前 BitmapData 实例)中与源矩形的左上角对应的点。 | |
randomSeed:int (default = 0 ) — 用于开始像素溶解的随机种子。 | |
numPixels:int (default = 0 ) — 默认值是源区域(宽度 x 高度)的 1/30。 | |
fillColor:uint (default = 0 ) — 一个 ARGB 颜色值,用于填充其源值等于目标值的像素。 |
int — 用于后续调用的新随机种子值。 |
TypeError — sourceBitmapData、sourceRect 或 destPoint 为空。 | |
TypeError — numPixels 值为负 |
pixelDissolve()
方法一次溶解 40 个像素,直到所有像素的颜色都已更改,从而将 BitmapData 对象由灰色转换为红色:
import flash.display.BitmapData; import flash.display.Bitmap; import flash.geom.Point; import flash.geom.Rectangle; import flash.utils.Timer; import flash.events.TimerEvent; var bmd:BitmapData = new BitmapData(100, 80, false, 0x00CCCCCC); var bitmap:Bitmap = new Bitmap(bmd); addChild(bitmap); var tim:Timer = new Timer(20); tim.start(); tim.addEventListener(TimerEvent.TIMER, timerHandler); function timerHandler(event:TimerEvent):void { var randomNum:Number = Math.floor(Math.random() * int.MAX_VALUE); dissolve(randomNum); } function dissolve(randomNum:Number):void { var rect:Rectangle = bmd.rect; var pt:Point = new Point(0, 0); var numberOfPixels:uint = 100; var red:uint = 0x00FF0000; bmd.pixelDissolve(bmd, rect, pt, randomNum, numberOfPixels, red); var grayRegion:Rectangle = bmd.getColorBoundsRect(0xFFFFFFFF, 0x00CCCCCC, true); if(grayRegion.width == 0 && grayRegion.height == 0 ) { tim.stop(); } }
scroll | () | 方法 |
public function scroll(x:int, y:int):void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
将图像按一定量的 (x, y) 像素进行滚动。滚动区域之外的边缘区域保持不变。
参数
x:int — 水平滚动量。 | |
y:int — 垂直滚动量。 |
import flash.display.Bitmap; import flash.display.BitmapData; import flash.geom.Rectangle; var bmd:BitmapData = new BitmapData(80, 80, true, 0xFFCCCCCC); var rect:Rectangle = new Rectangle(0, 0, 40, 40); bmd.fillRect(rect, 0xFFFF0000); var bm:Bitmap = new Bitmap(bmd); addChild(bm); trace (bmd.getPixel32(50, 20).toString(16)); // ffcccccccc bmd.scroll(30, 0); trace (bmd.getPixel32(50, 20).toString(16)); // ffff0000
setPixel | () | 方法 |
public function setPixel(x:int, y:int, color:uint):void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
设置 BitmapData 对象的单个像素。在此操作过程中将会保留图像像素的当前 Alpha 通道值。RGB 颜色参数的值被视为一个未经过相乘的颜色值。
注意:要提高性能,请在重复使用 setPixel()
或 setPixel32()
方法时,在调用 setPixel()
或 setPixel32()
方法之前先调用 lock()
方法,然后在做出所有像素更改后调用 unlock()
方法。此过程可防止引用此 BitmapData 实例的对象在您完成像素更改之前进行更新。
参数
x:int —
像素值会更改的像素的 x 位置。
| |
y:int —
像素值会更改的像素的 y 位置。
| |
color:uint — 生成的像素 RGB 颜色。 |
另请参见
setPixel()
方法在 BitmapData 对象中绘制一条红色直线:
import flash.display.Bitmap; import flash.display.BitmapData; var bmd:BitmapData = new BitmapData(80, 80, false, 0xCCCCCC); for (var i:uint = 0; i < 80; i++) { var red:uint = 0xFF0000; bmd.setPixel(i, 40, red); } var bm:Bitmap = new Bitmap(bmd); addChild(bm);
setPixel32 | () | 方法 |
public function setPixel32(x:int, y:int, color:uint):void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
设置 BitmapData 对象单个像素的颜色和 Alpha 透明度值。此方法与 setPixel()
方法类似;主要差别在于 setPixel32()
方法采用包含 Alpha 通道信息的 ARGB 颜色值。
BitmapData 对象中的所有像素都作为预乘颜色值进行存储。预乘图像像素具有已经与 Alpha 数据相乘的红色、绿色和蓝色通道值。例如,如果 Alpha 值为 0,则 RGB 通道的值也为 0,与它们未经过相乘的值无关。这种丢失数据的情况可能会在执行操作时导致一些问题。所有 BitmapData 方法都采用并返回未经过相乘的值。内部像素表示形式在其作为值返回之前从经过预乘的形式转换为未经过相乘的形式。在设置操作过程中,设置原始图像像素之前,像素值是经过预乘的。
注意:要提高性能,请在重复使用 setPixel()
或 setPixel32()
方法时,在调用 setPixel()
或 setPixel32()
方法之前先调用 lock()
方法,然后在做出所有像素更改后调用 unlock()
方法。此过程可防止引用此 BitmapData 实例的对象在您完成像素更改之前进行更新。
参数
x:int —
像素值会更改的像素的 x 位置。
| |
y:int —
像素值会更改的像素的 y 位置。
| |
color:uint — 生成的像素 ARGB 颜色。如果位图是不透明的(非透明)位图,则会忽略此颜色值的 Alpha 透明度部分。 |
另请参见
setPixel32()
方法在 BitmapData 对象中绘制一条透明的 (Alpha == 0x60) 红色直线:
import flash.display.Bitmap; import flash.display.BitmapData; var bmd:BitmapData = new BitmapData(80, 80, true, 0xFFCCCCCC); for (var i:uint = 0; i < 80; i++) { var red:uint = 0x60FF0000; bmd.setPixel32(i, 40, red); } var bm:Bitmap = new Bitmap(bmd); addChild(bm);
setPixels | () | 方法 |
public function setPixels(rect:Rectangle, inputByteArray:ByteArray):void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
将字节数组转换为像素数据的矩形区域。对于每个像素,将调用 ByteArray.readUnsignedInt()
方法并将返回值写入像素。如果字节数组在写入整个矩形之前结束,将返回函数。字节数组中的数据应该是 32 位 ARGB 像素值。在读取像素之前或之后,不会对字节数组执行搜索。
参数
rect:Rectangle — 指定 BitmapData 对象的矩形区域。 | |
inputByteArray:ByteArray — 一个 ByteArray 对象,由要在矩形区域中使用的 32 位未经过相乘的像素值组成。 |
EOFError —
inputByteArray 对象包括的数据不足以填充 rect 矩形的区域。在引发异常之前,该方法会尽可能多地填充像素。
| |
TypeError — rect 或 inputByteArray 为空。 |
另请参见
getPixels()
和 setPixels()
方法将像素从一个 BitmapData 对象复制到另一个 BitmapData 对象:
import flash.display.Bitmap; import flash.display.BitmapData; import flash.utils.ByteArray; import flash.geom.Rectangle; var bmd1:BitmapData = new BitmapData(100, 100, true, 0xFFCCCCCC); var bmd2:BitmapData = new BitmapData(100, 100, true, 0xFFFF0000); var rect:Rectangle = new Rectangle(0, 0, 100, 100); var bytes:ByteArray = bmd1.getPixels(rect); bytes.position = 0; bmd2.setPixels(rect, bytes); var bm1:Bitmap = new Bitmap(bmd1); addChild(bm1); var bm2:Bitmap = new Bitmap(bmd2); addChild(bm2); bm2.x = 110;
setVector | () | 方法 |
public function setVector(rect:Rectangle, inputVector:Vector.<uint>):void
参数
rect:Rectangle | |
inputVector:Vector.<uint> |
threshold | () | 方法 |
public function threshold(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, operation:String, threshold:uint, color:uint = 0, mask:uint = 0xFFFFFFFF, copySource:Boolean = false):uint
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
根据指定的阈值测试图像中的像素值,并将通过测试的像素设置为新的颜色值。通过使用 threshold()
方法,您可以隔离和替换图像中的颜色范围,并对图像像素执行其它逻辑操作。
threshold()
方法的测试逻辑如下所示:
((pixelValue & mask) operation (threshold & mask))
,则将像素设置为 color
;
copySource == true
,则将像素设置为 sourceBitmap
中的对应像素值。
operation
参数指定要用于阈值测试的比较运算符。例如,通过使用“==”作为 operation
参数,您可以隔离图像中的特定颜色值。或者通过使用 {operation: "<", mask: 0xFF000000, threshold: 0x7F000000, color: 0x00000000}
,您可以将所有目标像素设置为在源图像像素的 Alpha 小于 0x7F 时是完全透明的。您可以将此技巧用于动画过渡和其它效果。
参数
sourceBitmapData:BitmapData — 要使用的输入位图图像。源图像可以是另一个 BitmapData 对象,也可以引用当前 BitmapData 实例。 | |
sourceRect:Rectangle — 定义要用作输入的源图像区域的矩形。 | |
destPoint:Point — 目标图像(当前 BitmapData 实例)中与源矩形的左上角对应的点。 | |
operation:String — 下列比较运算符之一(作为字符串传递):“<”、“<=”、“>”、“>=”、“==”“!=” | |
threshold:uint — 测试每个像素时要比较的值,以查看该值是达到还是超过阈值。 | |
color:uint (default = 0 ) — 阈值测试成功时对像素设置的颜色值。默认值为 0x00000000。 | |
mask:uint (default = 0xFFFFFFFF ) — 用于隔离颜色成分的遮罩。 | |
copySource:Boolean (default = false ) —
如果该值为 true ,则源图像中的像素值将在阈值测试失败时复制到目标图像。如果为 false ,则在阈值测试失败时不会复制源图像。
|
uint — 已更改像素的数目。 |
TypeError — sourceBitmapData、sourceRect、destPoint 或操作为空。 | |
ArgumentError — 操作字符串不是有效的操作 |
perlinNoise()
方法将蓝色和红色图案添加到一个 BitmapData 对象,然后使用 threshold()
方法将那些像素从第一个 BitmapData 对象复制到第二个 BitmapData 对象,并将红色值大于 0x80 (50%) 的那些像素替换成已设置为透明红色 (0x20FF0000) 的像素:
import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.BitmapDataChannel; import flash.geom.Point; import flash.geom.Rectangle; var bmd1:BitmapData = new BitmapData(200, 200, true, 0xFFCCCCCC); var seed:int = int(Math.random() * int.MAX_VALUE); var channels:uint = BitmapDataChannel.RED | BitmapDataChannel.BLUE; bmd1.perlinNoise(100, 80, 12, seed, false, true, channels, false, null); var bitmap1:Bitmap = new Bitmap(bmd1); addChild(bitmap1); var bmd2:BitmapData = new BitmapData(200, 200, true, 0xFFCCCCCC); var pt:Point = new Point(0, 0); var rect:Rectangle = new Rectangle(0, 0, 200, 200); var threshold:uint = 0x00800000; var color:uint = 0x20FF0000; var maskColor:uint = 0x00FF0000; bmd2.threshold(bmd1, rect, pt, ">", threshold, color, maskColor, true); var bitmap2:Bitmap = new Bitmap(bmd2); bitmap2.x = bitmap1.x + bitmap1.width + 10; addChild(bitmap2);
unlock | () | 方法 |
public function unlock(changeRect:Rectangle = null):void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
解除锁定图像,以使引用 BitmapData 对象的任何对象(如 Bitmap 对象)在此 BitmapData 对象更改时更新。若要提高性能,请在对 setPixel()
或 setPixel32()
方法进行多次调用之前和之后使用此方法及 lock()
方法。
参数
changeRect:Rectangle (default = null ) — 已更改的 BitmapData 对象的区域。如果没有为此参数指定值,则会认为 BitmapData 对象的整个区域已更改。此参数需要 Flash Player 9.0.115.0 版或更高版本。 |
另请参见
picture
的 bitmapData
属性创建一个 BitmapData 对象。然后,该示例先调用 lock()
方法再调用复杂的自定义函数 complexTransformation()
,该函数可修改 BitmapData 对象。(picture
对象和 complexTransformation()
函数未在本示例中定义。) 即使 complexTransformation()
函数更新了 picture
对象的 bitmapData
属性,这些更新也只有在代码对 bitmapData
对象调用 unlock()
方法之后才会得到体现:
import flash.display.BitmapData; var bitmapData:BitmapData = picture.bitmapData; bitmapData.lock(); bitmapData = complexTransformation(bitmapData); bitmapData.unlock(); picture.bitmapData = bitmapData;
threshold()
方法。此任务是使用以下步骤完成的:
url
属性,它是图像文件的位置和名称
completeHandler()
方法完成图像操作以后进行的。
request
URLRequest 对象被传递给 loader.load()
,该方法使用显示对象将图像加载到内存中。
completeHandler()
方法执行以下操作:
duplicate
,该对象再调用 duplicateImage()
方法,该方法创建原始图像的副本。
duplicate
对象的 BitmapData 对象。
operation
-- 当阈值大于或等于原始值时应用新颜色。
threshold
-- 与每个像素相比较的值(在本例中是 Alpha 值为 0xCC 的浅灰色)。
color
-- 对通过阈值测试的像素设置的颜色,在本例中为纯黄色。
mask
-- 正好相反的颜色(透明的蓝色)。
copySource
-- 设置为 false
,指示阈值未通过测试时不复制像素值。该值没有意义,因为图像是重复的,并且只更改通过了阈值测试的像素。
threshold()
方法。得到的阈值计算式如下所示:if (current pixel Value & 0x000000FF) >= (0xCCCCCCCC & 0x000000FF) then set pixel to 0xFFFFFF00
。
注意:
package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Loader; import flash.display.Sprite; import flash.events.*; import flash.geom.Point; import flash.geom.Rectangle; import flash.net.URLRequest; public class BitmapDataExample extends Sprite { private var url:String = "Image.gif"; private var size:uint = 80; public function BitmapDataExample() { configureAssets(); } private function configureAssets():void { var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler); loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); var request:URLRequest = new URLRequest(url); loader.x = size * numChildren; loader.load(request); addChild(loader); } private function duplicateImage(original:Bitmap):Bitmap { var image:Bitmap = new Bitmap(original.bitmapData.clone()); image.x = size * numChildren; addChild(image); return image; } private function completeHandler(event:Event):void { var loader:Loader = Loader(event.target.loader); var image:Bitmap = Bitmap(loader.content); var duplicate:Bitmap = duplicateImage(image); var bitmapData:BitmapData = duplicate.bitmapData; var sourceRect:Rectangle = new Rectangle(0, 0, bitmapData.width, bitmapData.height); var destPoint:Point = new Point(); var operation:String = ">="; var threshold:uint = 0xCCCCCCCC; var color:uint = 0xFFFFFF00; var mask:uint = 0x000000FF; var copySource:Boolean = true; bitmapData.threshold(bitmapData, sourceRect, destPoint, operation, threshold, color, mask, copySource); } private function ioErrorHandler(event:IOErrorEvent):void { trace("Unable to load image: " + url); } } }