包 | flash.display |
类 | public class BitmapData |
继承 | BitmapData Object |
实现 | IBitmapDrawable |
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
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,191 像素,并且像素总数不能超过 16,777,215 像素。(因此,如果 BitmapData 对象的宽度为 8,191 像素,则其高度只能为 2,048 像素。)在 Flash Player 9 及早期版本和 AIR 1.1 及早期版本中,高度最大为 2,880 像素,宽度最大为 2,880 像素。
从 AIR 3 和 Flash Player 11 开始,已删除了对 BitmapData 对象的大小限制。现在,位图的最大大小取决于操作系统。
如果 BitmapData 对象无效(例如,如果它的 height == 0
且 width == 0
),或者已通过 dispose() 处理了该对象,则对 BitmapData 对象的任何方法或属性的调用都会引发 ArgumentError 错误。
相关 API 元素
flash.desktop.DockIcon.bitmaps
flash.display.Graphics.beginBitmapFill()
flash.desktop.Icon.bitmaps
flash.desktop.InteractiveIcon.bitmaps
flash.display.Loader
flash.desktop.SystemTrayIcon.bitmaps
属性 | 由以下参数定义 | ||
---|---|---|---|
constructor : Object
对类对象或给定对象实例的构造函数的引用。 | Object | ||
height : int [只读]
位图图像的高度,以像素为单位。 | BitmapData | ||
rect : Rectangle [只读]
定义位图图像大小和位置的矩形。 | BitmapData | ||
transparent : Boolean [只读]
定义位图图像是否支持每个像素具有不同的透明度。 | BitmapData | ||
width : int [只读]
位图图像的宽度,以像素为单位。 | 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 对象的内存。 | BitmapData | ||
draw(source:IBitmapDrawable, matrix:Matrix = null, colorTransform:flash.geom:ColorTransform = null, blendMode:String = null, clipRect:Rectangle = null, smoothing:Boolean = false):void
使用 Flash 运行时矢量渲染器在位图图像上绘制 source 显示对象。 | BitmapData | ||
drawWithQuality(source:IBitmapDrawable, matrix:Matrix = null, colorTransform:flash.geom:ColorTransform = null, blendMode:String = null, clipRect:Rectangle = null, smoothing:Boolean = false, quality:String = null):void
使用 Flash 运行时矢量渲染器在位图图像上绘制 source 显示对象。 | BitmapData | ||
使用选定的压缩程序算法压缩此 BitmapData 对象,并返回一个新 ByteArray 对象。 | 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 | ||
将 Vector 转换为像素数据的矩形区域。 | BitmapData | ||
threshold(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, operation:String, threshold:uint, color:uint = 0, mask:uint = 0xFFFFFFFF, copySource:Boolean = false):uint
根据指定的阈值测试图像中的像素值,并将通过测试的像素设置为新的颜色值。 | BitmapData | ||
返回此对象的字符串表示形式,其格式设置遵守区域设置特定的约定。 | Object | ||
返回指定对象的字符串表示形式。 | Object | ||
解除锁定图像,以使引用 BitmapData 对象的任何对象(如 Bitmap 对象)在此 BitmapData 对象更改时更新。 | BitmapData | ||
返回指定对象的原始值。 | Object |
height | 属性 |
rect | 属性 |
transparent | 属性 |
width | 属性 |
BitmapData | () | 构造函数 |
public function BitmapData(width:int, height:int, transparent:Boolean = true, fillColor:uint = 0xFFFFFFFF)
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
创建一个具有指定的宽度和高度的 BitmapData 对象。如果为 fillColor
参数指定一个值,则位图中的每个像素都将设置为该颜色。
默认情况下,将位图创建为透明位图,除非您为 transparent
参数传递值 false
。创建了不透明位图后,将无法将其更改为透明位图。不透明位图中的每个像素仅使用 24 位的颜色通道信息。如果将位图定义为透明,则每个像素将使用 32 位的颜色通道信息,其中包括 Alpha 透明度通道。
在 AIR 1.5 和 Flash Player 10 中,BitmapData 对象的最大宽度或高度为 8,191 像素,并且像素总数不能超过 16,777,215 像素。(因此,如果 BitmapData 对象的宽度为 8,191 像素,则其高度只能为 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 |
运行时版本: | Flash Player 9, AIR 1.0 |
取得一个源图像和一个滤镜对象,并生成过滤的图像。
此方法依赖于内置滤镜对象的行为,这些对象确定受输入源矩形影响的目标矩形。
应用滤镜后,结果图像可能会大于输入图像。例如,如果使用 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 对象的透明度与滤镜操作不兼容。
|
相关 API 元素
flash.filters.BlurFilter
flash.filters.ColorMatrixFilter
flash.filters.ConvolutionFilter
flash.filters.DisplacementMapFilter
flash.filters.DropShadowFilter
flash.filters.GlowFilter
flash.display.DisplayObject.filters
示例 ( 如何使用本示例 )
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 |
运行时版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
返回一个新的 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:flash.geom:ColorTransform):void
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
使用 ColorTransform
对象调整位图图像的指定区域中的颜色值。如果矩形与位图图像的边界匹配,则此方法将转换整个图像的颜色值。
参数
rect:Rectangle — 一个 Rectangle 对象,它定义在其中应用 ColorTransform 对象的图像区域。
| |
colorTransform:flash.geom:ColorTransform — 一个 ColorTransform 对象,它描述要应用的颜色转换值。
|
引发
TypeError — rect 或 colorTransform 为空。
|
相关 API 元素
示例 ( 如何使用本示例 )
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 |
运行时版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
比较两个 BitmapData 对象。如果两个 BitmapData 对象的尺寸(宽度和高度)相同,该方法将返回一个新的 BitmapData 对象,其中的每个像素都是两个源对象中的像素之间的“差”:
- 如果两个像素相等,则差异像素为 0x00000000。
- 如果两个像素具有不同的 RGB 值(忽略 Alpha 值),则差异像素为 0xRRGGBB,其中 RR/GG/BB 分别是红色、绿色和蓝色通道之间的个别差异值(源对象中的像素值减去
otherBitmapData
对象中的像素值)。本例中忽略了 Alpha 通道差异。 - 如果只有 Alpha 通道值不同,则像素值为 0xZZFFFFFF,其中 ZZ 是 Alpha 值差异(源对象中的 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
注意:用于填充这两个 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
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 为空。
|
示例 ( 如何使用本示例 )
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 |
运行时版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
将数据从另一个 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 为空。
|
相关 API 元素
示例 ( 如何使用本示例 )
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 |
运行时版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
为没有拉伸、旋转或色彩效果的图像之间的像素处理提供一个快速例程。此方法在目标 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;
copyPixelsToByteArray | () | 方法 |
public function copyPixelsToByteArray(rect:Rectangle, data:ByteArray):void
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 11.4, AIR 3.4 |
根据像素数据的矩形区域填充一个字节数组。从 ByteArray 的 position
索引开始,此方法为每个像素将一个无符号整数(32 位未经相乘的像素值)写入字节数组。如果需要,字节数组的大小将增大到必要的字节数以容纳所有像素数据。
参数
rect:Rectangle — 当前 BitmapData 对象中的一个矩形区域
| |
data:ByteArray — 目标 ByteArray 对象
|
引发
TypeError — 如果 rect 参数为 null 或 data 参数为 null
|
相关 API 元素
dispose | () | 方法 |
public function dispose():void
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
释放用来存储 BitmapData 对象的内存。
对图像调用 dispose()
方法时,该图像的宽度和高度将设置为 0。对此 BitmapData 实例的方法或属性的所有后续调用都将失败,并引发异常。
BitmapData.dispose()
立即释放由实际的位图数据占用的内存(一个位图最多可使用 64 MB 的内存)。使用 BitmapData.dispose()
后,BitmapData 对象不再可用,而且,如果对 BitmapData 对象调用函数,Flash 运行时将引发异常。但是,BitmapData.dispose()
不会将 BitmapData 对象(大约 128 个字节)作为垃圾回收;由实际的 BitmapData 对象占用的内存在垃圾回收器收集 BitmapData 对象时释放。
相关 API 元素
示例 ( 如何使用本示例 )
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:flash.geom:ColorTransform = null, blendMode:String = null, clipRect:Rectangle = null, smoothing:Boolean = false):void
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
使用 Flash 运行时矢量渲染器在位图图像上绘制 source
显示对象。可以指定 matrix
、colorTransform
、blendMode
和目标 clipRect
参数来控制呈现的执行方式。您可以根据需要指定是否应在缩放时对位图进行平滑处理(这只适用于源对象是 BitmapData 对象的情况)。
注意:drawWithQuality()
方法与 draw()
方法非常相似,但不使用 Stage.quality
属性确定矢量呈现的品质,您需要为 drawWithQuality()
方法指定 quality
参数。
此方法与如何在创作工具界面中使用对象的标准矢量渲染器来绘制对像直接对应。
源显示对象不对此调用使用其任何已应用的转换。它会被视为存在于库或文件中,没有矩阵转换、没有颜色转换,也没有混合模式。要使用对象自己的 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:flash.geom: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 对象。
|
相关 API 元素
flash.display.Stage.quality
flash.display.StageQuality
flash.display.BlendMode
flash.geom.ColorTransform
flash.geom.Matrix
flash.system.JPEGLoaderContext
示例 ( 如何使用本示例 )
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);
drawWithQuality | () | 方法 |
public function drawWithQuality(source:IBitmapDrawable, matrix:Matrix = null, colorTransform:flash.geom:ColorTransform = null, blendMode:String = null, clipRect:Rectangle = null, smoothing:Boolean = false, quality:String = null):void
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 11.3, AIR 3.3 |
使用 Flash 运行时矢量渲染器在位图图像上绘制 source
显示对象。可以指定 matrix
、colorTransform
、blendMode
和目标 clipRect
参数来控制呈现的执行方式。您可以根据需要指定是否应在缩放时对位图进行平滑处理(这只适用于源对象是 BitmapData 对象的情况)。
注意:drawWithQuality()
方法与 draw()
方法非常相似,但不使用 Stage.quality
属性确定矢量呈现的品质,您需要为 drawWithQuality()
方法指定 quality
参数。
此方法与如何在创作工具界面中使用对象的标准矢量渲染器来绘制对像直接对应。
源显示对象不对此调用使用其任何已应用的转换。它会被视为存在于库或文件中,没有矩阵转换、没有颜色转换,也没有混合模式。要使用对象自己的 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
属性。
如果源对象(如果是 Sprite 或 MovieClip 对象)和其所有子对象与调用方不来自同一个域,或者不在调用方可通过调用 Security.allowDomain()
方法访问的内容中,则调用 drawWithQuality()
将引发 SecurityError 异常。此限制不适用于应用程序安全沙箱中的 AIR 内容。
对于使用所加载的位图图像作为 source
也有一些限制。如果所加载的图像来自与调用方相同的域,则调用 drawWithQuality()
方法将成功。此外,图像服务器上的跨域策略文件可以向调用 drawWithQuality()
方法的 SWF 内容的域授予权限。在这种情况下,必须设置 LoaderContext 对象的 checkPolicyFile
属性,并在调用用于加载图像的 Loader 对象的 load()
方法时使用 LoaderContext 对象作为 context
参数。这些限制不适用于应用程序安全沙箱中的 AIR 内容。
在 Windows 中,drawWithQuality()
方法无法在 Adobe AIR 的 HTMLLoader 对象中捕获嵌入 HTML 页中的 SWF 内容。
drawWithQuality()
方法无法捕获 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:flash.geom: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 :
在将 | |
quality:String (default = null ) — 任意一个 StageQuality 值。选择要在绘制矢量图形时使用的消除锯齿品质。
|
引发
ArgumentError — source 参数不是 BitmapData 或 DisplayObject 对象。
| |
SecurityError — source 对象及其所有子对象(如果是 Sprite 或 MovieClip 对象)与调用方不来自同一个域,或者不在调用方可通过调用 Security.allowDomain() 方法访问的内容中。此限制不适用于应用程序安全沙箱中的 AIR 内容。
| |
ArgumentError — 源为空或不是有效的 IBitmapDrawable 对象。
|
相关 API 元素
flash.display.StageQuality
flash.display.BlendMode
flash.geom.ColorTransform
flash.geom.Matrix
flash.system.JPEGLoaderContext
示例 ( 如何使用本示例 )
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.drawWithQuality(tf, , , , , , StageQuality.LOW); var bmp:Bitmap = new Bitmap(myBitmapData); this.addChild(bmp);
encode | () | 方法 |
public function encode(rect:Rectangle, compressor:Object, byteArray:ByteArray = null):ByteArray
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 11.3, AIR 3.3 |
使用选定的压缩程序算法压缩此 BitmapData 对象,并返回一个新 ByteArray 对象。或者,向指定 ByteArray 写入结果数据。compressor
参数指定编码算法,可以是 PNGEncoderOptions、JPEGEncoderOptions 或 JPEGXREncoderOptions。
下面示例使用 JPEGEncoderOptions 压缩 BitmapData 对象:
// Compress a BitmapData object as a JPEG file. var bitmapData:BitmapData = new BitmapData(640,480,false,0x00FF00); var byteArray:ByteArray = new ByteArray(); bitmapData.encode(new Rectangle(0,0,640,480), new flash.display.JPEGEncoderOptions(), byteArray);
参数
rect:Rectangle — 要压缩的 BitmapData 对象的区域。
| |
compressor:Object — 要使用的压缩程序类型。有效值为:flash.display.PNGEncoderOptions 、flash.display.JPEGEncoderOptions 和 flash.display.JPEGXREncoderOptions 。
| |
byteArray:ByteArray (default = null ) — 保存编码图像的输出 ByteArray。
|
ByteArray — 包含编码图像的 ByteArray。
|
相关 API 元素
fillRect | () | 方法 |
public function fillRect(rect:Rectangle, color:uint):void
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
使用指定的 ARGB 颜色填充一个矩形像素区域。
参数
rect:Rectangle — 要填充的矩形区域。
| |
color:uint — 用于填充区域的 ARGB 颜色值。通常以十六进制格式指定 ARGB 颜色;例如,0xFF336699。
|
引发
TypeError — 矩形是空的。
|
相关 API 元素
示例 ( 如何使用本示例 )
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 |
运行时版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
对图像执行倾倒填充操作,从 (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 |
运行时版本: | Flash Player 9, AIR 1.0 |
已知 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 |
运行时版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
确定矩形区域是将位图图像中指定颜色的所有像素完全包括起来(如果将 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 颜色的位。通过使用 & (bitwise 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 |
运行时版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
返回一个整数,它表示 BitmapData 对象中在某个特定点 (x, y) 处的 RGB 像素值。getPixel()
方法将返回一个未经过相乘的像素值。没有返回任何 Alpha 信息。
BitmapData 对象中的所有像素都作为预乘颜色值进行存储。预乘图像像素具有已经与 Alpha 数据相乘的红色、绿色和蓝色通道值。例如,如果 Alpha 值为 0,则 RGB 通道的值也为 0,与它们未经过相乘的值无关。这种丢失数据的情况可能会在执行操作时导致一些问题。所有 BitmapData 方法都采用并返回未经过相乘的值。内部像素表示形式在其作为值返回之前从经过预乘的形式转换为未经过相乘的形式。在设置操作过程中,设置原始图像像素之前,像素值是经过预乘的。
参数
x:int — 像素的 x 位置。
| |
y:int — 像素的 y 位置。
|
uint — 一个表示 RGB 像素值的数字。如果 (x, y) 坐标在图像范围以外,则该方法返回 0。
|
相关 API 元素
示例 ( 如何使用本示例 )
getPixel()
方法确定左上角像素中的颜色值:
import flash.display.BitmapData; var bmd:BitmapData = new BitmapData(80, 40, false, 0xFF0000); var pixelValue:uint = bmd.getPixel(0, 0); trace(pixelValue.toString(16)); // ff0000;
getPixel32 | () | 方法 |
public function getPixel32(x:int, y:int):uint
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
返回一个 ARGB 颜色值,它包含 Alpha 通道数据和 RGB 数据。此方法与 getPixel()
方法类似,后者返回没有 Alpha 通道数据的 RGB 颜色。
BitmapData 对象中的所有像素都作为预乘颜色值进行存储。预乘图像像素具有已经与 Alpha 数据相乘的红色、绿色和蓝色通道值。例如,如果 Alpha 值为 0,则 RGB 通道的值也为 0,与它们未经过相乘的值无关。这种丢失数据的情况可能会在执行操作时导致一些问题。所有 BitmapData 方法都采用并返回未经过相乘的值。内部像素表示形式在其作为值返回之前从经过预乘的形式转换为未经过相乘的形式。在设置操作过程中,设置原始图像像素之前,像素值是经过预乘的。
参数
x:int — 像素的 x 位置。
| |
y:int — 像素的 y 位置。
|
uint — 一个表示 ARGB 像素值的数字。如果 (x, y) 坐标在图像范围以外,则返回 0。
|
相关 API 元素
示例 ( 如何使用本示例 )
getPixel32()
方法确定左上角像素中的颜色值,并随之确定每个颜色成分(Alpha、红色、绿色和蓝色)的十六进制值:
import flash.display.BitmapData; var bmd:BitmapData = new BitmapData(80, 40, true, 0xFF44AACC); var pixelValue:uint = bmd.getPixel32(0, 0); 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 |
运行时版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
从像素数据的矩形区域生成一个字节数组。为每个像素将一个无符号整数(32 位未经相乘的像素值)写入字节数组。
参数
rect:Rectangle — 当前 BitmapData 对象中的一个矩形区域。
|
ByteArray — 表示给定矩形中的像素的 ByteArray。
|
引发
TypeError — 矩形是空的。
|
相关 API 元素
示例 ( 如何使用本示例 )
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 | () | 方法 |
histogram | () | 方法 |
public function histogram(hRect:Rectangle = null):Vector.<Vector.<Number>>
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5, Flash Lite 4 |
计算 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 |
运行时版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
在一个位图图像与一个点、矩形或其他位图图像之间执行像素级的点击检测。根据定义,点击区域是指一个不透明像素或两个重叠的不透明像素上的点或矩形的重叠部分。在执行点击测试时,将不会考虑两个对象中任何一个对象的拉伸、旋转或其他变形。
如果某个图像是不透明图像,则此方法会将其视为完全不透明的矩形。两个图像必须是透明图像才能执行判断透明度的像素级点击测试。当您在测试两个透明图像时,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 |
运行时版本: | Flash Player 9, AIR 1.0 |
锁定图像,以使引用 BitmapData 对象的任何对象(如 Bitmap 对象)在此 BitmapData 对象更改时不会更新。要提高性能,请在对 setPixel()
或 setPixel32()
方法进行多次调用之前和之后使用此方法及 unlock()
方法。
相关 API 元素
示例 ( 如何使用本示例 )
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 |
运行时版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
对每个通道执行从源图像向目标图像的混合。对于每个通道和每个像素,将基于源和目标像素的通道值来计算新值。例如,在红色通道中,新值是按如下方式计算的(其中 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 |
运行时版本: | Flash Player 9, AIR 1.0 |
使用表示随机杂点的像素填充图像。
参数
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 )的任意组合。您可以使用 logical OR (| ) 运算符来组合通道值。
| |
grayScale:Boolean (default = false ) — 一个布尔值。如果该值为 true ,则会通过将所有颜色通道设置为相同的值来创建一个灰度图像。将此参数设置为 true 不会影响 Alpha 通道的选择。
|
相关 API 元素
flash.display.BitmapDataChannel.BLUE
flash.display.BitmapDataChannel.GREEN
flash.display.BitmapDataChannel.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 |
运行时版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
重新映射一个具有最多四组调色板数据(每个通道一组)的图像中的颜色通道值。
Flash 运行时通过下列步骤生成结果图像:
- 计算了红色、绿色、蓝色和 Alpha 值后,将使用标准 32 位整数算法将它们相加在一起。
- 每个像素的红色、绿色、蓝色和 Alpha 通道值被分别提取为一个 0 到 255 的值。使用这些值在相应的数组中查找新的颜色值:
redArray
、greenArray
、blueArray
和alphaArray
。这四个数组中的每一个都应包含 256 个值。 - 在检索了所有四个新通道值之后,它们会被组合成一个应用于像素的标准 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 为空。
|
示例 ( 如何使用本示例 )
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
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 9, AIR 1.0 |
生成 Perlin 杂点图像。
Perlin 杂点生成算法会内插单个随机杂点函数名为 octave 并将它们组合成一个函数,该函数生成多个看起来很自然的随机杂点。就像音乐上的八音度,每个 octave 函数的频率都是其前面一个 octave 函数频率的两倍。Perlin 杂点被描述为“杂点的碎片总和”,因为它将多组杂点数据与不同级别的细节组合在一起。
您可以使用 Perlin 杂点函数来模拟自然现象和风景,例如,木材纹理、云彩或山脉。在大多数情况下,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 )的任意组合。您可以使用 logical 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 |
运行时版本: | Flash Player 9, AIR 1.0 |
执行源图像到目标图像的像素溶解,或使用同一图像执行像素溶解。Flash 运行时使用 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 |
运行时版本: | Flash Player 9, AIR 1.0 |
将图像按一定量的 (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 |
运行时版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
设置 BitmapData 对象的单个像素。在此操作过程中将会保留图像像素的当前 Alpha 通道值。RGB 颜色参数的值被视为一个未经过相乘的颜色值。
注意:要提高性能,请在重复使用 setPixel()
或 setPixel32()
方法时,在调用 setPixel()
或 setPixel32()
方法之前先调用 lock()
方法,然后在做出所有像素更改后调用 unlock()
方法。此过程可防止引用此 BitmapData 实例的对象在您完成像素更改之前进行更新。
参数
x:int — 像素值会更改的像素的 x 位置。
| |
y:int — 像素值会更改的像素的 y 位置。
| |
color:uint — 生成的像素 RGB 颜色。
|
相关 API 元素
示例 ( 如何使用本示例 )
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 |
运行时版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
设置 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 透明度部分。
|
相关 API 元素
示例 ( 如何使用本示例 )
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 |
运行时版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
将字节数组转换为像素数据的矩形区域。对于每个像素,将调用 ByteArray.readUnsignedInt()
方法并将返回值写入像素。如果字节数组在写入整个矩形之前结束,将返回函数。字节数组中的数据应该是 32 位 ARGB 像素值。在读取像素之前或之后,不会对字节数组执行搜索。
参数
rect:Rectangle — 指定 BitmapData 对象的矩形区域。
| |
inputByteArray:ByteArray — 一个 ByteArray 对象,由要在矩形区域中使用的 32 位未经过相乘的像素值组成。
|
引发
EOFError — inputByteArray 对象包括的数据不足以填充 rect 矩形的区域。在引发异常之前,该方法会尽可能多地填充像素。
| |
TypeError — rect 或 inputByteArray 为空。
|
相关 API 元素
示例 ( 如何使用本示例 )
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
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5, Flash Lite 4 |
将 Vector 转换为像素数据的矩形区域。对于每个像素,将会读取 Vector 元素并将其写入到 BitmapData 像素中。Vector 中的数据应该是 32 位 ARGB 像素值。
参数
rect:Rectangle — 指定 BitmapData 对象的矩形区域。
| |
inputVector:Vector.<uint> — 一个 Vector 对象,由将在矩形区域中使用的 32 位未经过相乘的像素值组成。
|
引发
RangeError — 矢量数组不够大,无法读取所有像素数据。
|
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 |
运行时版本: | Flash Player 9, AIR 1.0 |
根据指定的阈值测试图像中的像素值,并将通过测试的像素设置为新的颜色值。通过使用 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 |
运行时版本: | Flash Player 9, AIR 1.0 |
解除锁定图像,以使引用 BitmapData 对象的任何对象(如 Bitmap 对象)在此 BitmapData 对象更改时更新。要提高性能,请在对 setPixel()
或 setPixel32()
方法进行多次调用之前和之后使用此方法及 lock()
方法。
参数
changeRect:Rectangle (default = null ) — 已更改的 BitmapData 对象的区域。如果没有为此参数指定值,则会认为 BitmapData 对象的整个区域已更改。此参数需要 Flash Player 9.0.115.0 版或更高版本。
|
相关 API 元素
示例 ( 如何使用本示例 )
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
属性,它是图像文件的位置和名称 - 类构造函数创建一个 Loader 对象,该对象随后对一个事件侦听器进行实例化,该事件侦听器的调度是在
completeHandler()
方法完成图像操作以后进行的。 - 然后,
request
URLRequest 对象被传递给loader.load()
,该方法使用显示对象将图像加载到内存中。 - 图像随后将被放在显示列表中,后者将图像显示在屏幕上,坐标为 x = 0, y = 0。
- 然后,
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
。
注意:
- 您需要编译 SWF 文件,并将“本地播放安全性”设置为“只访问本地文件”。
- 此示例要求将名为 Image.gif 的文件与您的 SWF 文件放在同一目录中。
- 建议使用宽度最大约为 80 像素的图像。
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); } } }
Tue Jun 12 2018, 11:04 AM Z