flash.display
public class BitmapData
继承BitmapData Inheritance Object
实现 IBitmapDrawable

语言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

使用 BitmapData 类,您可以处理 Bitmap 对象的数据(像素)。 可以使用 BitmapData 类的方法创建任意大小的透明或不透明位图图像,并在运行时采用多种方式操作这些图像。 也可以访问使用 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.componentXDisplacementMapFilter.componentY 属性一起使用时,这些通道以数字形式表示,并且这些数字在 BitmapDataChannel 类中由以下常量表示:

通过使用 Bitmap 对象的 bitmapData 属性,可以将 BitmapData 对象附加到 Bitmap 对象。

可以使用 Graphics.beginBitmapFill() 方法用 BitmapData 对象填充 Graphics 对象。

BitmapData 对象的最大宽度和高度为 2880 像素。

如果 BitmapData 对象无效(例如,如果它的 height == 0width == 0),或者已通过 dispose() 处理了该对象,则对 BitmapData 对象的任何方法或属性的调用都会引发 ArgumentError 错误。

查看示例

另请参见

flash.display.Bitmap.bitmapData
flash.display.Graphics.beginBitmapFill()
flash.display.Loader



公共 属性
 属性定义方
 Inheritedconstructor : Object
对类对象或给定对象实例的构造函数的引用。
Object
  height : int
[read-only] 位图图像的高度,以像素为单位。
BitmapData
 Inheritedprototype : Object
[static] 对类或函数对象的原型对象的引用。
Object
  rect : Rectangle
[read-only] 定义位图图像大小和位置的矩形。
BitmapData
  transparent : Boolean
[read-only] 定义位图图像是否支持每个像素具有不同的透明度。
BitmapData
  width : int
[read-only] 位图图像的宽度,以像素为单位。
BitmapData
公共 方法
 方法定义方
  
BitmapData(width:int, height:int, transparent:Boolean = true, fillColor:uint = 0xFFFFFFFF)
创建一个具有指定的宽度和高度的 BitmapData 对象。
BitmapData
  
applyFilter(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, filter:BitmapFilter):void
取得一个源图像和一个滤镜对象,并生成过滤的图像。
BitmapData
  
返回一个新的 BitmapData 对象,它是对原始实例的克隆,包含与原始实例所含位图完全相同的副本。
BitmapData
  
使用 ColorTransform 对象调整位图图像的指定区域中的颜色值。
BitmapData
  
compare(otherBitmapData:BitmapData):Object
比较两个 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 矢量渲染器在位图图像上绘制 source 显示对象。
BitmapData
  
fillRect(rect:Rectangle, color:uint):void
使用指定的 ARGB 颜色填充一个矩形像素区域。
BitmapData
  
floodFill(x:int, y:int, color:uint):void
对图像执行倾倒填充操作,从 (x, y) 坐标开始,填充一种特定的颜色。
BitmapData
  
已知 BitmapData 对象、源矩形和滤镜对象,确定 applyFilter() 方法调用所影响的目标矩形。
BitmapData
  
getColorBoundsRect(mask:uint, color:uint, findColor:Boolean = true):Rectangle
确定矩形区域是将位图图像中指定颜色的所有像素完全包括起来(如果将 findColor 参数设置为 true),还是将不包括指定颜色的所有像素完全包括起来(如果将 findColor 参数设置为 false)。
BitmapData
  
返回一个整数,它表示 BitmapData 对象中在特定点 (x, y) 处的 RGB 像素值。
BitmapData
  
返回一个 ARGB 颜色值,它包含 Alpha 通道数据和 RGB 数据。
BitmapData
  
从像素数据的矩形区域生成一个字节数组。
BitmapData
 Inherited
指示对象是否已经定义了指定的属性。
Object
  
hitTest(firstPoint:Point, firstAlphaThreshold:uint, secondObject:Object, secondBitmapDataPoint:Point = null, secondAlphaThreshold:uint = 1):Boolean
在一个位图图像与一个点、矩形或其它位图图像之间执行像素级的点击检测。
BitmapData
 Inherited
指示 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
 Inherited
指示指定的属性是否存在、是否可枚举。
Object
  
scroll(x:int, y:int):void
按某一 (x, y) 像素量滚动图像。
BitmapData
  
setPixel(x:int, y:int, color:uint):void
设置 BitmapData 对象的单个像素。
BitmapData
  
setPixel32(x:int, y:int, color:uint):void
设置 BitmapData 对象单个像素的颜色和 Alpha 透明度值。
BitmapData
  
setPixels(rect:Rectangle, inputByteArray:ByteArray):void
将字节数组转换为像素数据的矩形区域。
BitmapData
 Inherited
设置循环操作动态属性的可用性。
Object
  
threshold(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, operation:String, threshold:uint, color:uint = 0, mask:uint = 0xFFFFFFFF, copySource:Boolean = false):uint
根据指定的阈值测试图像中的像素值,并将通过测试的像素设置为新的颜色值。
BitmapData
 Inherited
返回指定对象的字符串表示形式。
Object
  
unlock(changeRect:Rectangle = null):void
解除锁定图像,以使引用 BitmapData 对象的任何对象(如 Bitmap 对象)在此 BitmapData 对象更改时更新。
BitmapData
 Inherited
返回指定对象的原始值。
Object
属性详细信息
height属性
height:int  [read-only]

语言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

位图图像的高度,以像素为单位。


实现
    public function get height():int
rect属性 
rect:Rectangle  [read-only]

语言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

定义位图图像大小和位置的矩形。 矩形的顶部和左侧为零;宽度和高度等于 BitmapData 对象的宽度和高度(以像素为单位)。


实现
    public function get rect():Rectangle
transparent属性 
transparent:Boolean  [read-only]

语言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

定义位图图像是否支持每个像素具有不同的透明度。 只有当通过为构造函数的 transparent 参数传入 true 来构造 BitmapData 对象时,才能设置此值。 然后,在创建 BitmapData 对象之后,可以通过确定 transparent 属性的值是否为 true 来检查该对象是否支持每个像素具有不同的透明度。


实现
    public function get transparent():Boolean
width属性 
width:int  [read-only]

语言版本 : ActionScript 3.0
Player 版本 : 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
Player 版本 : Flash Player 9

创建一个具有指定的宽度和高度的 BitmapData 对象。 如果为 fillColor 参数指定一个值,则位图中的每个像素都将设置为该颜色。

默认情况下,将位图创建为透明位图,除非您为 transparent 参数传递值 false。 创建了不透明位图后,将无法将其更改为透明位图。 不透明位图中的每个像素仅使用 24 位的颜色通道信息。 如果将位图定义为透明,则每个像素将使用 32 位的颜色通道信息,其中包括 Alpha 透明度通道。

BitmapData 对象的最大宽度和高度为 2880 像素。 如果指定的宽度值或高度值大于 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 — 宽度和/或高度无效(小于等于 0,大于 2880)
方法详细信息
applyFilter()方法
public function applyFilter(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, filter:BitmapFilter):void

语言版本 : ActionScript 3.0
Player 版本 : 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 参数的对象是同一对象,Flash Player 将使用对象的临时副本来执行滤镜。 为了获得最佳性能,请避免这种情况。

参数

sourceBitmapData:BitmapData — 要使用的输入位图图像。 源图像可以是另一个 BitmapData 对象,也可以引用当前 BitmapData 实例。
 
sourceRect:Rectangle — 定义要用作输入的源图像区域的矩形。
 
destPoint:Point — 目标图像(当前 BitmapData 实例)中与源矩形的左上角对应的点。
 
filter:BitmapFilter — 用于执行过滤操作的滤镜对象。 每种滤镜都有某些要求,如下所示:
  • BlurFilter — 此滤镜可使用不透明或透明的源图像和目标图像。 如果这两种图像的格式不匹配,则在过滤过程中生成的源图像副本将与目标图像的格式匹配。
  • BevelFilter、DropShadowFilter、GlowFilter、ChromeFilter — 这些滤镜的目标图像必须是透明图像。 调用 DropShadowFilter 或 GlowFilter 会创建包含投影或发光的 Alpha 通道数据的图像。 它不会在目标图像上创建投影。 如果将这些滤镜中的任何滤镜用于不透明的目标图像,将会引发异常 (ActionScript 3.0)。
  • ConvolutionFilter — 此滤镜可使用不透明或透明的源图像和目标图像。
  • ColorMatrixFilter — 此滤镜可使用不透明或透明的源图像和目标图像。
  • DisplacementMapFilter — 此滤镜可使用不透明或透明的源图像和目标图像,但源图像和目标图像的格式必须相同。


引发
TypeError — sourceBitmapData、sourceRect、destPoint 或滤镜为空。
 
IllegalOperationError — BitmapData 对象的透明度与滤镜操作不兼容。

另请参见


示例
如何使用示例

下例演示如何将模糊滤镜应用于 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
Player 版本 : Flash Player 9

返回一个新的 BitmapData 对象,它是对原始实例的克隆,包含与原始实例所含位图完全相同的副本。

返回
BitmapData — 一个新的 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
Player 版本 : Flash Player 9

使用 ColorTransform 对象调整位图图像的指定区域中的颜色值。 如果矩形与位图图像的边界匹配,则此方法将转换整个图像的颜色值。

参数

rect:Rectangle — 一个 Rectangle 对象,它定义在其中应用 ColorTransform 对象的图像区域。
 
colorTransform:ColorTransform — 一个 ColorTransform 对象,它描述要应用的颜色转换值。


引发
TypeError — rect 或 colorTransform 为空。

另请参见


示例
如何使用示例

下例演示如何将颜色转换应用于 BitmapData 对象的左半部分(矩形):

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
Player 版本 : Flash Player 9

比较两个 BitmapData 对象。 如果两个 BitmapData 对象的尺寸(宽度和高度)相同,该方法将返回一个新的 BitmapData 对象,其中的每个像素都是两个源对象中的像素之间的“差”:

例如,以下面两个 BitmapData 对象为例:

  var bmd1:BitmapData = new BitmapData(50, 50, true, 0xFFFF0000);
  var bmd2:BitmapData = new BitmapData(50, 50, true, 0xCCFFAA00);
  var diffBmpData:BitmapData = 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);
  

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
  

参数

otherBitmapData:BitmapData — 要与源 BitmapData 对象比较的 BitmapData 对象。

返回
Object — 如果两个 BitmapData 对象的尺寸(宽度和高度)相同,则方法将返回一个新的 BitmapData 对象,其中包含两个对象之间的差异(请参阅主要讨论内容)。 如果这两个 BitmapData 对象相同,则该方法返回数字 0。 如果这两个 BitmapData 对象的宽度不相等,则该方法返回数字 -3。 如果这两个 BitmapData 对象的高度不相等,则该方法返回数字 -4。

引发
TypeError — otherBitmapData 为空。

示例
如何使用示例

下例显示通过比较两个尺寸相同的 BitmapData 对象而得到的 BitmapData 对象中的像素值:

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
Player 版本 : Flash Player 9

将数据从另一个 BitmapData 对象或当前 BitmapData 对象的一个通道传输到当前 BitmapData 对象的某个通道中。 目标 BitmapData 对象的其它通道中的所有数据都将被保留。

源通道值和目标通道值可以是下列值之一:

参数

sourceBitmapData:BitmapData — 要使用的输入位图图像。 源图像可以是另一个 BitmapData 对象,也可以指当前 BitmapData 对象。
 
sourceRect:Rectangle — 源 Rectangle 对象。 若只想复制位图内较小区域中的通道数据,请指定一个小于 BitmapData 对象整体大小的源矩形。
 
destPoint:Point — 目标 Point 对象,它表示将要在其中放置新通道数据的矩形区域的左上角。 若只想将通道数据从目标图像中的一个区域复制到其它区域,请指定一个 (0,0) 以外的点。
 
sourceChannel:uint — 源通道。 使用来自 BitmapDataChannel 类(BitmapDataChannel.REDBitmapDataChannel.BLUEBitmapDataChannel.GREENBitmapDataChannel.ALPHA)的值。
 
destChannel:uint — 目标通道。 使用来自 BitmapDataChannel 类(BitmapDataChannel.REDBitmapDataChannel.BLUEBitmapDataChannel.GREENBitmapDataChannel.ALPHA)的值。


引发
TypeError — sourceBitmapData、sourceRect 或 destPoint 为空。

另请参见


示例
如何使用示例

下例演示如何将 BitmapData 对象中的红色通道复制到一个在 20 x 20 像素的自身区域中的蓝色通道。

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
Player 版本 : 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 为空。

示例
如何使用示例

下例演示如何将一个 BitmapData 对象中 20 x 20 像素的区域内的像素复制到另一个 BitmapData 对象:

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
Player 版本 : 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
Player 版本 : Flash Player 9

使用 Flash Player 矢量渲染器在位图图像上绘制 source 显示对象。 可以指定 matrixcolorTransformblendMode 和目标 clipRect 参数来控制呈现的执行方式。 您可以根据需要指定是否应在缩放时对位图进行平滑处理(这只适用于源对象是 BitmapData 对象的情况)。

此方法与如何在创作工具界面中使用对象的标准矢量渲染器来绘制图像直接对应。

源显示对象不对此调用使用其任何已应用的转换。 它会被视为存在于库或文件中,没有矩阵转换、没有颜色转换,也没有混合模式。 若要使用对象自己的 transform 属性来绘制显示对象(如影片剪辑),可以将其 transform 属性对象复制到使用 BitmapData 对象的 Bitmap 对象的 transform 属性。

安全注释:source 对象及(就 Sprite 或 MovieClip 对象而论)及其所有子对象必须与调用方处在同一个域中,或者必须处在调用方可通过调用 Security.allowDomain() 方法访问的 SWF 文件中。 如果不满足这些条件,draw() 方法将不会绘制任何内容。

参数

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

在将 smoothing 设置为 true 的情况下绘制位图要比在将 smoothing 设置为 false 的情况下执行相同操作更为缓慢。


引发
ArgumentError source 参数不是 BitmapData 或 DisplayObject 对象。
 
SecurityError source 对象及(就 Sprite 或 MovieClip 对象而论)其所有子对象与调用方不在同一个域中,或者不在调用方可通过调用 Security.allowDomain() 方法访问的 SWF 文件中。
 
ArgumentError — 源为空或不是有效的 IBitmapDrawable 对象。

另请参见


示例
如何使用示例

下例演示如何将 TextField 对象绘制到 BitmapData 对象:

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
Player 版本 : Flash Player 9

使用指定的 ARGB 颜色填充一个矩形像素区域。

参数

rect:Rectangle — 要填充的矩形区域。
 
color:uint — 用于填充区域的 ARGB 颜色值。 通常以十六进制格式指定 ARGB 颜色;例如,0xFF336699。


引发
TypeError — 矩形是空的。

另请参见


示例
如何使用示例

下例演示如何用蓝色填充 BitmapData 对象的一个矩形区域:

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
Player 版本 : Flash Player 9

对图像执行倾倒填充操作,从 (x, y) 坐标开始,填充一种特定的颜色。 floodFill() 方法类似于各种绘图程序中的“颜料桶”工具。 该颜色是包含 Alpha 信息和颜色信息的 ARGB 颜色。

参数

x:int — 图像的 x 坐标。
 
y:int — 图像的 y 坐标。
 
color:uint — 要用作填充色的 ARGB 颜色。


示例
如何使用示例

下例演示如何用红色填充 BitmapData 对象的一个区域,即围绕由点 (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
Player 版本 : 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
Player 版本 : 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 — 指定颜色的图像区域。

示例
如何使用示例

下例将创建一个 BitmapData 对象,其上半部分的像素为红色。 然后,该示例将调用 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
Player 版本 : 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。

另请参见


示例
如何使用示例

下例创建一个用红色填充的 BitmapData 对象,然后使用 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
Player 版本 : 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。

另请参见


示例
如何使用示例

下例创建一个用颜色填充的 BitmapData 对象,然后使用 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
Player 版本 : Flash Player 9

从像素数据的矩形区域生成一个字节数组。 为每个像素将一个无符号整数(32 位未经相乘的像素值)写入字节数组。

参数

rect:Rectangle — 当前 BitmapData 对象中的一个矩形区域。

返回
ByteArray — 表示给定矩形中的像素的 ByteArray。

引发
TypeError — 矩形是空的。

另请参见


示例
如何使用示例

下例将创建一个用随机杂点像素填充的 BitmapData 对象,然后通过 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);
hitTest()方法 
public function hitTest(firstPoint:Point, firstAlphaThreshold:uint, secondObject:Object, secondBitmapDataPoint:Point = null, secondAlphaThreshold:uint = 1):Boolean

语言版本 : ActionScript 3.0
Player 版本 : 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 为空。

示例
如何使用示例

下例将创建一个仅在矩形区域 (20, 20, 40, 40) 中不透明的 BitmapData 对象,然后调用 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
Player 版本 : Flash Player 9

锁定图像,以使引用 BitmapData 对象的任何对象(如 Bitmap 对象)在此 BitmapData 对象更改时不会更新。 若要提高性能,请在对 setPixel()setPixel32() 方法进行多次调用之前和之后使用此方法及 unlock() 方法。

另请参见


示例
如何使用示例

下例根据 Bitmap 对象 picturebitmapData 属性创建一个 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
Player 版本 : Flash Player 9

对每个通道执行从源图像向目标图像的混合。 下面是用于每个通道的公式:

new red dest = (red source * redMultiplier) + (red dest * (256 - redMultiplier) / 256;

redMultipliergreenMultiplierblueMultiplieralphaMultiplier 值是用于每个颜色通道的乘数。 它们的有效范围为 0 到 256。

参数

sourceBitmapData:BitmapData — 要使用的输入位图图像。 源图像可以是另一个 BitmapData 对象,也可以引用当前 BitmapData 对象。
 
sourceRect:Rectangle — 定义要用作输入的源图像区域的矩形。
 
destPoint:Point — 目标图像(当前 BitmapData 实例)中与源矩形的左上角对应的点。
 
redMultiplier:uint — 一个要与红色通道值相乘的数字。
 
greenMultiplier:uint — 一个要与绿色通道值相乘的数字。
 
blueMultiplier:uint — 一个要与蓝色通道值相乘的数字。
 
alphaMultiplier:uint — 一个要与 Alpha 透明度值相乘的数字。


引发
TypeError — sourceBitmapData、sourceRect 或 destPoint 为空。

示例
如何使用示例

下例将创建两个 BitmapData 对象。 这两个对象的大小均为 100 x 80 像素。 第一个对象用绿色填充,第二个对象用红色填充。 该代码调用 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
Player 版本 : Flash Player 9

使用表示随机杂点的像素填充图像。

参数

randomSeed:int — 要使用的随机种子数。 如果您保持使所有其它参数不变,可以通过改变随机种子值来生成不同的伪随机结果。 杂点函数是一个映射函数,不是真正的随机数生成函数,所以它每次都会根据相同的随机种子创建相同的结果。
 
low:uint (default = 0) — 要为每个通道生成的最低值(0 到 255)。
 
high:uint (default = 255) — 要为每个通道生成的最高值(0 到 255)。
 
channelOptions:uint (default = 7) — 一个数字,可以是四个颜色通道值(BitmapDataChannel.REDBitmapDataChannel.BLUEBitmapDataChannel.GREENBitmapDataChannel.ALPHA)的任意组合。 您可以使用逻辑 OR 运算符(|)来组合通道值。
 
grayScale:Boolean (default = false) — 一个布尔值。 如果该值为 true,则会通过将所有颜色通道设置为相同的值来创建一个灰度图像。 将此参数设置为 true 不会影响 Alpha 通道的选择。

另请参见


示例
如何使用示例

下例将创建两个 BitmapData 对象,并对这两个对象都调用 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
Player 版本 : Flash Player 9

重新映射一个具有最多四组调色板数据(每个通道一组)的图像中的颜色通道值。

Flash Player 使用以下步骤生成结果图像:

  1. 计算了红色、绿色、蓝色和 Alpha 值后,将使用标准 32 位整数算法将它们相加在一起。
  2. 每个像素的红色、绿色、蓝色和 Alpha 通道值被分别提取为一个 0 到 255 的值。 使用这些值在相应的数组中查找新的颜色值:redArraygreenArrayblueArrayalphaArray。 这四个数组中的每一个都应包含 256 个值。
  3. 在检索了所有四个新通道值之后,它们会被组合成一个应用于像素的标准 ARGB 值。

此方法可以支持跨通道效果。 每个输入数组可以包含完整的 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 为空。

示例
如何使用示例

下例将创建一个中心有红色方框的绿色 BitmapData 对象,然后使用 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

Player 版本 : 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.REDBitmapDataChannel.BLUEBitmapDataChannel.GREENBitmapDataChannel.ALPHA)的任意组合。 您可以使用逻辑 OR 运算符(|)来组合通道值。
 
grayScale:Boolean (default = false) — 一个布尔值。 如果该值为 true,则通过将红色、绿色和蓝色通道的每一个值都设置为相同的值来创建一个灰度图像。 如果此值设置为 true,则 Alpha 通道值将不会受到影响。
 
offsets:Array (default = null) — 与每个 octave 的 xy 偏移量相对应的点数组。 通过操作这些偏移量值,您可以平滑滚动 perlinNoise 图像的图层。 偏移数组中的每个点将影响一个特定的 octave 杂点函数。


示例
如何使用示例

下例将创建一个 200 x 200 像素的 BitmapData 对象,该对象调用 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
Player 版本 : Flash Player 9

执行源图像到目标图像的像素溶解,或使用同一图像执行像素溶解。 Flash Player 使用 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
Player 版本 : Flash Player 9

将图像按一定量的 (x, y) 像素进行滚动。 滚动区域之外的边缘区域保持不变。

参数

x:int — 水平滚动量。
 
y:int — 垂直滚动量。


示例
如何使用示例

下例显示将 Bitmap 数据对象向右滚动 40 个像素的效果:

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
Player 版本 : 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
Player 版本 : 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
Player 版本 : 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;
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
Player 版本 : Flash Player 9

根据指定的阈值测试图像中的像素值,并将通过测试的像素设置为新的颜色值。 通过使用 threshold() 方法,您可以隔离和替换图像中的颜色范围,并对图像像素执行其它逻辑操作。

threshold() 方法的测试逻辑如下所示:

  1. 如果 ((pixelValue & mask) operation (threshold & mask)),则将像素设置为 color
  2. 否则,如果 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
Player 版本 : Flash Player 9

解除锁定图像,以使引用 BitmapData 对象的任何对象(如 Bitmap 对象)在此 BitmapData 对象更改时更新。 若要提高性能,请在对 setPixel()setPixel32() 方法进行多次调用之前和之后使用此方法及 lock() 方法。

参数

changeRect:Rectangle (default = null) — 已更改的 BitmapData 对象的区域。 如果没有为此参数指定值,则会认为 BitmapData 对象的整个区域已更改。

另请参见


示例
如何使用示例

下例根据 Bitmap 对象 picturebitmapData 属性创建一个 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;
示例 如何使用示例

下例使用 BitmapDataExample 类将图像 Image.gif 加载到位于默认位置 (0, 0) 的 DisplayObject 中。 然后,将 Image.gif 的副本放在原图像的右边,它使用 threshold() 方法。 此任务是使用以下步骤完成的:
  1. 创建 url 属性,它是图像文件的位置和名称
  2. 类构造函数创建一个 Loader 对象,该对象随后对一个事件侦听器进行实例化,该事件侦听器的调度是在 completeHandler() 方法完成图像操作以后进行的。
  3. 然后,requestURLRequest 对象被传递给 loader.load(),该方法使用显示对象将图像加载到内存中。
  4. 图像随后将被放在显示列表中,后者将图像显示在屏幕上,坐标为 x = 0, y = 0
  5. 然后,completeHandler() 方法执行以下操作:
    • 创建另一个 Loader 对象以及使用 Loader 对象初始化的 Bitmap 对象。
    • 创建第二个 Bitmap 对象 duplicate,该对象再调用 duplicateImage() 方法,该方法创建原始图像的副本。
    • 创建一个 BitmapData 对象,该对象将被分配给 duplicate 对象的 BitmapData 对象。
    • 创建一个与原始图像具有相同的坐标、宽度和高度的新的 Rectangle 对象。
    • 创建一个新的 Point 对象,其默认为 x = 0, y = 0
    • 创建以下变量:
      • 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);
        }
    }
}




 

评论添加到页面后给我发送电子邮件 | 评论报告

当前页: http://livedocs.adobe.com/flash/9.0_cn/ActionScriptLangRefV3/flash/display/BitmapData.html