パッケージflash.display
public class BitmapData
継承BitmapData Inheritance Object
実装IBitmapDrawable

BitmapData クラスを使用すると、Bitmap オブジェクトのデータ (ピクセル) を処理できます。BitmapData クラスのメソッドを使用して、任意のサイズの透明または不透明のビットマップイメージを作成し、実行時にさまざまな方法で操作することができます。さらに、flash.display.Loader クラスを使ってロードされるビットマップイメージの BitmapData にアクセスすることもできます。

このクラスを使用すると、ビットマップのレンダリング処理を Flash Player 内部の表示更新ルーチンから分離できます。BitmapData オブジェクトを直接操作することで複雑なイメージを作成できるので、ベクターデータのコンテンツを連続的に再描画するフレーム単位のオーバーヘッドを避けることができます。

BitmapData クラスのメソッドは、(ビットマップ以外の表示オブジェクトでは使用可能な) フィルタを使って設定できないような効果をサポートします。

BitmapData オブジェクトには、ピクセルデータの配列が含まれています。このデータは、完全に不透明なビットマップ、またはアルファチャンネルデータを含む透明なビットマップを表現できます。いずれの種類の BitmapData オブジェクトも 32 ビット整数のバッファとして保存されます。各 32 ビット整数は、ビットマップ内の 1 つのピクセルのプロパティを決定します。

各 32 ビット整数は、ピクセルのアルファ透明度と赤緑青 (ARGB) の値を表す 4 つの 8 ビットチャンネル値 (0 ~ 255) の組み合わせです。(ARGB 値では、最上位バイトがアルファチャンネル値を表し、続いて赤、緑、青を表します。)

この 4 つのチャンネル (アルファ、赤、緑、青) は、BitmapData.copyChannel() メソッド、または DisplacementMapFilter.componentX および DisplacementMapFilter.componentY プロパティで使用する場合に数値として表されます。これらの数値は、BitmapDataChannel クラスの次の定数によって表されます。

Bitmap オブジェクトの bitmapData プロパティを使用すると、BitmapData オブジェクトを Bitmap オブジェクトに関連付けることができます。

Graphics.beginBitmapFill() メソッドを使用すると、BitmapData オブジェクトを使って Graphics オブジェクトを塗りつぶすことができます。

BitmapData オブジェクトの最大の幅と高さは 2880 ピクセルです。

BitmapData オブジェクトのいずれかのメソッドやプロパティを呼び出したときに、BitmapData オブジェクトが無効なものであった場合 (たとえば height == 0 かつ width == 0 の場合) や、dispose() で既に破棄されたものであった場合は、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
  clone():BitmapData
新しい BitmapData オブジェクトとして、元のインスタンスのクローンを返します。含まれるビットマップはまったく同じコピーになります。
BitmapData
  colorTransform(rect:Rectangle, colorTransform:ColorTransform):void
ColorTransform オブジェクトを使用して、ビットマップイメージの特定領域のカラー値を調整します。
BitmapData
  compare(otherBitmapData:BitmapData):Object
2 つの BitmapData オブジェクトを比較します。
BitmapData
  copyChannel(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, sourceChannel:uint, destChannel:uint):void
別の BitmapData オブジェクトまたは現在の BitmapData オブジェクトの 1 つのチャンネルのデータを、現在の BitmapData オブジェクトのチャンネルに転送します。
BitmapData
  copyPixels(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, alphaBitmapData:BitmapData = null, alphaPoint:Point = null, mergeAlpha:Boolean = false):void
イメージ間のピクセル操作 (伸長、回転、カラー効果なし) を高速に実行するルーチンを提供します。
BitmapData
  dispose():void
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
  generateFilterRect(sourceRect:Rectangle, filter:BitmapFilter):Rectangle
BitmapData オブジェクト、ソース矩形、フィルタオブジェクトを指定して、applyFilter() メソッド呼び出しによって影響を受けるターゲット矩形を決定します。
BitmapData
  getColorBoundsRect(mask:uint, color:uint, findColor:Boolean = true):Rectangle
(findColor パラメータが true に設定されている場合) ビットマップイメージ内の指定された色のすべてのピクセルを完全に囲む矩形領域を判別します。または、(findColor パラメータが false に設定されている場合) 指定された色ではないすべてのピクセルを完全に囲む矩形領域を判別します。
BitmapData
  getPixel(x:int, y:int):uint
BitmapData オブジェクトの特定ポイント (x, y) の RGB ピクセル値を表す整数を返します。
BitmapData
  getPixel32(x:int, y:int):uint
アルファチャンネルデータと RGB データを含む ARGB カラー値を返します。
BitmapData
  getPixels(rect:Rectangle):ByteArray
ピクセルデータの矩形領域からバイト配列を生成します。
BitmapData
 InheritedhasOwnProperty(name:String):Boolean
オブジェクトに指定されたプロパティが定義されているかどうかを示します。
Object
  hitTest(firstPoint:Point, firstAlphaThreshold:uint, secondObject:Object, secondBitmapDataPoint:Point = null, secondAlphaThreshold:uint = 1):Boolean
1 つのビットマップイメージと、ポイント、矩形、または他のビットマップイメージとの間でピクセルレベルのヒットを検出します。
BitmapData
 InheritedisPrototypeOf(theClass:Object):Boolean
Object クラスのインスタンスが、パラメータとして指定されたオブジェクトのプロトタイプチェーン内にあるかどうかを示します。
Object
  lock():void
この BitmapData オブジェクトが変更されたときに、BitmapData オブジェクトを参照するすべてのオブジェクト (たとえば Bitmap オブジェクト) が更新されないように、イメージをロックします。
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
最大で 4 つのカラーパレットデータ配列 (各チャンネルごとに 1 つの配列) を使用して、イメージ内のカラーチャンネル値をマッピングし直します。
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
 InheritedpropertyIsEnumerable(name:String):Boolean
指定されたプロパティが存在し、列挙可能かどうかを示します。
Object
  scroll(x:int, y:int):void
所定の (x, y) ピクセル量だけイメージをスクロールします。
BitmapData
  setPixel(x:int, y:int, color:uint):void
BitmapData オブジェクトの 1 つのピクセルを設定します。
BitmapData
  setPixel32(x:int, y:int, color:uint):void
BitmapData オブジェクトの 1 つのピクセルにカラー値とアルファ透明度値を設定します。
BitmapData
  setPixels(rect:Rectangle, inputByteArray:ByteArray):void
バイト配列をピクセルデータの矩形領域に変換します。
BitmapData
 InheritedsetPropertyIsEnumerable(name:String, isEnum:Boolean = true):void
ループ処理に対するダイナミックプロパティの可用性を設定します。
Object
  threshold(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, operation:String, threshold:uint, color:uint = 0, mask:uint = 0xFFFFFFFF, copySource:Boolean = false):uint
指定されたしきい値と比較してイメージ内のピクセル値をテストし、テストに適合したピクセルに新しいカラー値を設定します。
BitmapData
 InheritedtoString():String
指定されたオブジェクトのストリング表現を返します。
Object
  unlock(changeRect:Rectangle = null):void
この BitmapData オブジェクトが変更されたときに、BitmapData オブジェクトを参照するすべてのオブジェクト (たとえば Bitmap オブジェクト) が更新されるように、イメージをロック解除します。
BitmapData
 InheritedvalueOf():Object
指定されたオブジェクトのプリミティブ値を返します。
Object
プロパティの詳細
heightプロパティ
height:int  [read-only]

ビットマップイメージの高さ (ピクセル単位) です。

実装
    public function get height():int
rectプロパティ 
rect:Rectangle  [read-only]

ビットマップイメージのサイズと位置を定義する矩形です。矩形の上端と左端は 0 になります。幅と高さは、BitmapData オブジェクトのピクセルの幅および高さと等しくなります。

実装
    public function get rect():Rectangle
transparentプロパティ 
transparent:Boolean  [read-only]

ビットマップイメージがピクセル単位の透明度をサポートするかどうかを定義します。この値を設定できるのは、コンストラクタの transparent パラメータに true を渡すことによって BitmapData オブジェクトを作成する場合だけです。BitmapData オブジェクトを作成した後、transparent プロパティの値が true であるかどうかを確認することにより、このオブジェクトがピクセルごとの透明度をサポートするかどうかを検査できます。

実装
    public function get transparent():Boolean
widthプロパティ 
width:int  [read-only]

ビットマップイメージの幅 (ピクセル単位) です。

実装
    public function get width():int
コンストラクタの詳細
BitmapData()コンストラクタ
public 関数 BitmapData(width:int, height:int, transparent:Boolean = true, fillColor:uint = 0xFFFFFFFF)

指定された幅と高さで BitmapData オブジェクトを作成します。fillColor パラメータに値を指定した場合、ビットマップのすべてのピクセルにその色が設定されます。

transparent パラメータに false を渡さない限り、デフォルトではビットマップが透明として作成されます。不透明のビットマップを作成した後、それを透明のビットマップに変更することはできません。不透明のビットマップに含まれるすべてのピクセルは、24 ビットのカラーチャンネル情報だけを使用します。ビットマップを透明に定義した場合、すべてのピクセルは、アルファ透明チャンネルを含む 32 ビットのカラーチャンネル情報を使用します。

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

ソースイメージとフィルタオブジェクトを受け取り、フィルタを適用して得られるイメージを生成します。

このメソッドはビルトインフィルタオブジェクトの動作に依存します (このオブジェクトは、入力ソース矩形によって影響を受けるターゲット矩形を決定します)。

フィルタを適用した後、結果として得られるイメージは入力イメージよりも大きくなることがあります。たとえば、BlurFilter クラスを使用してソース矩形 (50,50,100,100) とターゲットポイント (10,10) をぼかすと、ターゲットイメージで変更される領域は、ぼかしのために、(10,10,60,60) よりも大きくなります。これは、applyFilter() 呼び出し時に内部で発生します。

sourceBitmapData パラメータの sourceRect パラメータが内側領域 (200 ●x● 200 のイメージ内の (50,50,100,100) など) である場合、フィルタは、sourceRect パラメータの外側にあるソースピクセルを使用して、ターゲット矩形を生成します。

sourceBitmapData パラメータとして指定されたオブジェクトと BitmapData オブジェクトが同じであれば、Flash Player はオブジェクトの一時コピーを使ってフィルタを実行します。最適なパフォーマンスを得るには、このような状況を避けてください。

パラメータ
sourceBitmapData:BitmapData — 使用する入力ビットマップイメージです。ソースイメージは、別の BitmapData オブジェクトにすることも、現在の BitmapData インスタンスを参照することもできます。
 
sourceRect:Rectangle — 入力として使用するソースイメージの領域を定義する矩形です。
 
destPoint:Point — ソース矩形の左上隅に対応する、ターゲットイメージ (現在の BitmapData インスタンス) 内のポイントです。
 
filter:BitmapFilter — フィルタ適用処理に使用されるフィルタオブジェクトです。それぞれの種類のフィルタには、次のような要件があります。
  • BlurFilter — このフィルタは、透明または不透明なソースイメージとターゲットイメージを使用できます。イメージのフォーマットが一致しない場合、フィルタ適用中に作成されるソースイメージのコピーがターゲットイメージのフォーマットに合わせられます。
  • BevelFilter、DropShadowFilter、GlowFilter、ChromeFilter — これらのフィルタのターゲットイメージは透明イメージでなければなりません。DropShadowFilter または GlowFilter を呼び出すと、ドロップシャドウまたはグローのアルファチャンネルデータを含むイメージが作成されます。ドロップシャドウはターゲットイメージ上に作成されません。これらのフィルタを不透明なターゲットイメージに対して使用すると、例外がスローされます (ActionScript 3.0)。
  • ConvolutionFilter — このフィルタは、透明または不透明なソースイメージとターゲットイメージを使用できます。
  • ColorMatrixFilter — このフィルタは、透明または不透明なソースイメージとターゲットイメージを使用できます。
  • DisplacementMapFilter — このフィルタは、透明または不透明なソースイメージとターゲットイメージを使用できますが、イメージの形式はソースとターゲットで同じである必要があります。

スロー
TypeError — sourceBitmapData、sourceRect、destPoint、または filter が null です。
 
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

新しい BitmapData オブジェクトとして、元のインスタンスのクローンを返します。含まれるビットマップはまったく同じコピーになります。

戻り値
BitmapData — 元のオブジェクトと同一の新しい BitmapData オブジェクトです。


次の例は、BitmapData インスタンスのクローンを作成する方法を示しています。さらに、 クローンされた BitmapData インスタンスを変更しても、元のインスタンスは変更されません。

import flash.display.Bitmap;
import flash.display.BitmapData;

var bmd1:BitmapData = new BitmapData(100, 80, true, 0x00000000);
var bmd2:BitmapData = bmd1.clone();

bmd1.setPixel32(1, 1, 0xFFFFFFFF);

trace(bmd1.getPixel32(1, 1));        // 4294967295 == 0xFFFFFFFF
trace(bmd2.getPixel32(1, 1));        // 0

var bm1:Bitmap = new Bitmap(bmd1);
this.addChild(bm1);
var bm2:Bitmap = new Bitmap(bmd2);
this.addChild(bm2);
bm2.x = 110;

colorTransform()メソッド 
public function colorTransform(rect:Rectangle, colorTransform:ColorTransform):void

ColorTransform オブジェクトを使用して、ビットマップイメージの特定領域のカラー値を調整します。矩形がビットマップイメージの境界と一致する場合、このメソッドはイメージ全体のカラー値を変換します。

パラメータ
rect:Rectangle — ColorTransform オブジェクトが適用されるイメージの領域を定義する Rectangle オブジェクトです。
 
colorTransform:ColorTransform — 適用されるカラー変換値を記述する ColorTransform オブジェクトです。

スロー
TypeError — rect または colorTransform が null です。

関連項目



次の例は、カラー変換を BitmapData オブジェクトの左半分 (矩形) に適用する方法を 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

2 つの BitmapData オブジェクトを比較します。2 つの BitmapData オブジェクトのサイズ (幅と高さ) が同じであれば、メソッドは新しい BitmapData オブジェクトを返します。この新しいオブジェクトの各ピクセルは、2 つのソースオブジェクトのピクセル間の「差分」です。

たとえば、次のような 2 つの 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);
  

メモ: 2 つの BitmapData オブジェクトを塗りつぶすために使用されるそれぞれの色の RGB 値はわずかに異なります (0xFF0000 と 0xFFAA00)。compare() メソッドの結果として新しい BitmapData オブジェクトが生成され、その各ピクセルは 2 つのビットマップ間の RGB 値の差分を示します。

次のような 2 つの BitmapData オブジェクトがあるとします。両者の RGB カラーは同じですが、アルファ値は異なります。

  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 オブジェクトが生成され、その各ピクセルは 2 つのビットマップ間のアルファ値の差分を示します。

BitmapData オブジェクトが等しい (幅と高さ、およびピクセル値が同じ) 場合、このメソッドは数値 0 を返します。

BitmapData オブジェクトの幅が等しくない場合、高さが同じであれば、このメソッドは数値 -3 を返します。

BitmapData オブジェクトの高さが等しくない場合、幅が同じであれば、このメソッドは数値 -4 を返します。

次の例では、幅の異なる 2 つの Bitmap オブジェクトを比較します (それぞれの幅は 50 と 60)。

  var bmd1:BitmapData = new BitmapData(100, 50, false, 0xFFFF0000);
  var bmd2:BitmapData = new BitmapData(100, 60, false, 0xFFFFAA00);
  trace(bmd1.compare(bmd2)); // -3
  
パラメータ
otherBitmapData:BitmapData — ソース BitmapData オブジェクトと比較される BitmapData オブジェクトです。

戻り値
Object — 2 つの BitmapData オブジェクトのサイズ (幅と高さ) が同じであれば、このメソッドは、2 つのオブジェクト間の差分を示す新しい BitmapData オブジェクトを返します (主な説明の項を参照してください)。2 つの BitmapData オブジェクトが等しい場合、このメソッドは数値 0 を返します。BitmapData オブジェクトの幅が等しくない場合、メソッドは数値 -3 を返します。BitmapData オブジェクトの高さが等しくない場合、メソッドは数値 -4 を返します。

スロー
TypeError — otherBitmapData が null です。


次の例では、同じサイズの 2 つの 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

別の BitmapData オブジェクトまたは現在の BitmapData オブジェクトの 1 つのチャンネルのデータを、現在の 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 が null です。

関連項目



次の例は、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

イメージ間のピクセル操作 (伸長、回転、カラー効果なし) を高速に実行するルーチンを提供します。このメソッドは、ソースイメージの矩形領域を、ターゲット BitmapData オブジェクトのターゲットポイントにある同じサイズの矩形領域にコピーします。

alphaBitmap パラメータと alphaPoint パラメータを含めれば、2 番目のイメージをソースイメージのアルファソースとして使用できます。ソースイメージにアルファデータがある場合、2 つのアルファデータセットを使用して、ソースイメージのピクセルがターゲットイメージ上に合成されます。alphaPoint パラメータは、ソース矩形の左上隅に対応する、アルファイメージ内のポイントです。ソースイメージとアルファイメージが交わらない部分のピクセルは、ターゲットイメージにコピーされません。

mergeAlpha プロパティは、透明なイメージが別の透明なイメージにコピーされるときにアルファチャンネルが使用されるかどうかを制御します。(アルファを使用せずに) ピクセルをコピーするには、mergeAlpha プロパティを false に設定すると、すべてのピクセルがソースからターゲットにコピーされます。mergeAlpha プロパティのデフォルト値は true です。

パラメータ
sourceBitmapData:BitmapData — ピクセルのコピー元となる入力ビットマップイメージです。ソースイメージは、別の BitmapData インスタンスにすることも、現在の BitmapData インスタンスを参照することもできます。
 
sourceRect:Rectangle — 入力として使用するソースイメージの領域を定義する矩形です。
 
destPoint:Point — ターゲットポイントです。新しいピクセルが配置される矩形領域の左上隅を表します。
 
alphaBitmapData:BitmapData (default = null) — 第 2 のアルファ BitmapData オブジェクトソースです。
 
alphaPoint:Point (default = null) — アルファ BitmapData オブジェクトソース内のポイントです。sourceRect パラメータの左上隅に対応します。
 
mergeAlpha:Boolean (default = false) — アルファチャンネルを使用するには、値を true に設定します。アルファチャンネルを使用せずにピクセルをコピーするには、値を false に設定します。

スロー
TypeError — sourceBitmapData、sourceRect または destPoint が null です。


次の例は、1 つの 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

BitmapData オブジェクトの格納に使用されるメモリを解放します。

dispose() メソッドをイメージに対して呼び出すと、イメージの幅と高さがゼロに設定されます。それ以降、この 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

Flash Player のベクターレンダラを使用して、source 表示オブジェクトをビットマップイメージ上に描画します。matrixcolorTransformblendMode、およびターゲット clipRect パラメータを指定することにより、レンダリングの実行方法を制御できます。さらに、必要に応じて、拡大・縮小時にビットマップのスムージングを行うかどうかを指定することもできます (これはソースオブジェクトが BitmapData オブジェクトの場合にのみ可能です)。

このメソッドは、オーサリングツールインターフェイスにおいてオブジェクトに対して標準ベクターレンダラを使ってオブジェクトを描画する方法に直接対応します。

ソース表示オブジェクトは、この呼び出しで適用される変換を使用しません。ライブラリやファイルの中に存在するものとして扱われ、マトリックス変換、カラー変換、ブレンドモードはありません。変換プロパティを使って (ムービークリップなどの) 表示オブジェクトを描画するには、BitmapData オブジェクトを使用する Bitmap オブジェクトの transform プロパティに 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) — 描画するソースオブジェクトの領域を定義する矩形オブジェクトです。この値を指定しない場合、クリッピングは発生せず、ソースオブジェクト全体が描画されます。
 
smoothing:Boolean (default = false) — 拡大・縮小時に BitmapData オブジェクトのスムージングを行うかどうかを決定するブール値です。

スロー
ArgumentError source パラメータが、BitmapData または DisplayObject オブジェクトではありません。
 
SecurityError source オブジェクト、および (Sprite または MovieClip オブジェクトの) すべての子オブジェクトが呼び出し元と同じドメインに属していないか、Security.allowDomain() メソッド呼び出し後に呼び出し元からアクセスできる SWF ファイルに含まれていません。
 
ArgumentError — source が null であるか、有効な 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

指定された ARGB カラーで矩形領域のピクセルを塗りつぶします。

パラメータ
rect:Rectangle — 塗りつぶす矩形領域です。
 
color:uint — 領域を塗りつぶすため使用される ARGB カラー値です。ARGB カラー値は通常、16 進数形式 (たとえば、0xFF336699) で指定します。

スロー
TypeError — rect が null です。

関連項目



次の例は 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

(x, y) 座標を始点として所定の色で塗りつぶすことにより、イメージの塗りつぶし処理を実行します。floodFill() メソッドは、各種のペイントプログラムのバケツツールのようなものです。color は、アルファ情報とカラー情報を含む ARGB カラーです。

パラメータ
x:int — イメージの x 座標です。
 
y:int — イメージの y 座標です。
 
color:uint — 塗りとして使用する ARGB カラーです。


次の例は、BitmapData オブジェクトの 1 領域を塗りつぶす方法を示しています。この領域は ポイント (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

BitmapData オブジェクト、ソース矩形、フィルタオブジェクトを指定して、applyFilter() メソッド呼び出しによって影響を受けるターゲット矩形を決定します。

たとえば、ぼかしフィルタは通常、元のイメージのサイズよりも大きい領域に影響を与えます。デフォルトの BlurFilter インスタンス (blurX = blurY = 4) によってフィルタが適用される 100 ●x● 200 ピクセルのイメージは (-2,-2,104,204) というターゲット矩形を生成します。generateFilterRect() メソッドを使用すると、このターゲット矩形のサイズを前もって知ることができるので、フィルタ処理の前にターゲットイメージを適切なサイズにすることができます。

いくつかのフィルタは、ソースイメージのサイズに基づいてターゲット矩形をクリッピングします。たとえば、内側の DropShadow は、ソースイメージよりも大きい結果を生成しません。この API では、ソース rect パラメータではなく、BitmapData オブジェクトをソースの境界として使用します。

パラメータ
sourceRect:Rectangle — 入力として使用するソースイメージの領域を定義する矩形です。
 
filter:BitmapFilter — ターゲット矩形を算出するために使用するフィルタオブジェクトです。

戻り値
Rectangle — イメージ、sourceRect パラメータ、およびフィルタを使って算出されるターゲット矩形です。

スロー
TypeError — sourceRect または filter が null です。


次の例は、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

(findColor パラメータが true に設定されている場合) ビットマップイメージ内の指定された色のすべてのピクセルを完全に囲む矩形領域を判別します。または、(findColor パラメータが false に設定されている場合) 指定された色ではないすべてのピクセルを完全に囲む矩形領域を判別します。

たとえば、あるソースイメージで、0 以外のアルファチャンネルを含むイメージの矩形を判別するには、パラメータとして {mask: 0xFF000000, color: 0x00000000} を渡します。findColor パラメータが true に設定されている場合、(value & mask) == color であるピクセルの境界を見つけるためにイメージ全体が検索されます (value はピクセルのカラー値)。findColor パラメータが false に設定されている場合、(value & mask) != color であるピクセルの境界を見つけるためにイメージ全体が検索されます (value はピクセルのカラー値)。イメージの周囲の空白を判別するには、空白以外のピクセルの境界を見つけるために、{mask: 0xFFFFFFFF, color: 0xFFFFFFFF} を渡してください。

パラメータ
mask:uint — 対象となる ARGB カラーのビットを指定する 16 進数値です。カラー値は、& (ビット単位の論理積 (AND)) 演算子を使用して、この 16 進数値と組み合わせられます。
 
color:uint — 16 進数値です。(findColortrue に設定されている場合は) 一致すべき ARGB カラー、(findColorfalse に設定されている場合は) 一致すべきでない 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 mask:uint = 0xFFFFFF; 
var color:uint = 0xFF0000;  
var redBounds:Rectangle = bmd.getColorBoundsRect(mask, color, true);
trace(redBounds); // (x=0, y=0, w=80, h=20)

var notRedBounds:Rectangle = bmd.getColorBoundsRect(mask, 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

BitmapData オブジェクトの特定ポイント (x, y) の RGB ピクセル値を表す整数を返します。getPixel() メソッドは、乗算されていないピクセル値を返します。アルファ情報は返しません。

BitmapData オブジェクト内のすべてのピクセルは、乗算済みカラー値として保存されます。乗算済みイメージピクセルは、アルファデータが既に乗算された赤、緑、青の各カラーチャンネル値を保持します。たとえば、アルファ値が 0 の場合、乗算されていない値とは無関係に、RGB チャンネルの値も 0 になります。このようにデータが失われると、処理の実行時に問題が生じることがあります。BitmapData のすべてのメソッドは、乗算されていない値を受け取ったり返したりします。ピクセルの内部表現は、値として返される前に、乗算済みから非乗算に変換されます。設定処理の際は、ピクセル値が事前に乗算されてから、生のイメージピクセルが設定されます。

パラメータ
x:int — ピクセルの x 座標。
 
y:int — ピクセルの y 座標。

戻り値
uint — RGB ピクセル値を表す数値。(x, y) 座標がイメージ境界の外側である場合、メソッドは 0 を返します。ビットマップが透明ではなく不透明として作成された場合、指定されたポイントがイメージ境界の内側であれば、メソッドはエラーコード -1 を返します。

関連項目



次の例では、赤で塗りつぶされた 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

アルファチャンネルデータと RGB データを含む ARGB カラー値を返します。このメソッドは getPixel() メソッドと似ていますが、getPixel() メソッドはアルファチャンネルデータがない RGB カラーを返します。

BitmapData オブジェクト内のすべてのピクセルは、乗算済みカラー値として保存されます。乗算済みイメージピクセルは、アルファデータが既に乗算された赤、緑、青の各カラーチャンネル値を保持します。たとえば、アルファ値が 0 の場合、乗算されていない値とは無関係に、RGB チャンネルの値も 0 になります。このようにデータが失われると、処理の実行時に問題が生じることがあります。BitmapData のすべてのメソッドは、乗算されていない値を受け取ったり返したりします。ピクセルの内部表現は、値として返される前に、乗算済みから非乗算に変換されます。設定処理の際は、ピクセル値が事前に乗算されてから、生のイメージピクセルが設定されます。

パラメータ
x:int — ピクセルの x 座標。
 
y:int — ピクセルの y 座標。

戻り値
uint — ARGB ピクセル値を表す数値。(x, y) 座標がイメージの境界外である場合は、0 を返します。

関連項目



次の例では、1 つの色で塗りつぶされた BitmapData オブジェクトを作成した後、 getPixel32() メソッドを使って左上のピクセルのカラー値を判別します。さらに、 それぞれのカラー成分 (アルファ、赤、緑、青) に対応する 16 進数値を判別します。
import flash.display.BitmapData;

var bmd:BitmapData = new BitmapData(80, 40, true, 0xFF44AACC);

var pixelValue:uint = bmd.getPixel32(1, 1);
var alpha:uint = pixelValue >> 24 & 0xFF;
var red:uint = pixelValue >> 16 & 0xFF;
var green:uint = pixelValue >> 8 & 0xFF;
var blue:uint = pixelValue & 0xFF;

trace(alpha.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

ピクセルデータの矩形領域からバイト配列を生成します。各ピクセルごとに、符号なし整数 (32 ビットの乗算されないピクセル値) をバイト配列に書き込みます。

パラメータ
rect:Rectangle — 現在の BitmapData オブジェクト内の矩形領域です。

戻り値
ByteArray — 特定の矩形内のピクセルを表す ByteArray です。

スロー
TypeError — rect が null です。

関連項目



次の例では、ランダムノイズのピクセルで塗りつぶされた BitmapData オブジェクトを作成した後、 getPixels() メソッドを使用して、ByteArray オブジェクトを BitmapData オブジェクトのピクセル値で塗りつぶします。
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

1 つのビットマップイメージと、ポイント、矩形、または他のビットマップイメージとの間でピクセルレベルのヒットを検出します。ヒットテストの際、どちらのオブジェクトの変換 (伸縮、回転など) も考慮されません。

イメージが不透明である場合、このメソッドでは完全に不透明な矩形とみなされます。透過性を考慮するピクセルレベルのヒットテストを実施するには、両方のイメージとも透明でなければなりません。2 つの透明なイメージをテストするとき、アルファしきい値パラメータは、アルファチャンネル値 (0 ~ 255) がいくつであれば不透明とみなすかを制御します。

パラメータ
firstPoint:Point — 任意の座標空間における BitmapData イメージの左上隅の位置です。同じ座標空間を使って secondBitmapPoint パラメータが定義されます。
 
firstAlphaThreshold:uint — このヒットテストで不透明とみなされるアルファチャンネルの最大値です。
 
secondObject:Object — Rectangle、Point、Bitmap、または BitmapData オブジェクトです。
 
secondBitmapDataPoint:Point (default = null) — 2 番目の BitmapData オブジェクト内のピクセル位置を定義するポイントです。このパラメータは、secondObject の値が BitmapData オブジェクトである場合にのみ使用します。
 
secondAlphaThreshold:uint (default = 1) — 2 番目の BitmapData オブジェクト内で不透明であるとみなされるアルファチャンネルの最大値です。このパラメータは、secondObject の値が BitmapData オブジェクトで、両方の BitmapData オブジェクトが透明である場合にのみ使用します。

戻り値
Boolean — ヒットが発生する場合は true、そうでない場合は false です。

スロー
ArgumentError secondObject パラメータが、Point、Rectangle、Bitmap、または BitmapData オブジェクトではありません。
 
TypeError — firstPoint が null です。


次の例では、矩形領域 (20, 20, 40, 40) でのみ不透明な BitmapData オブジェクトを作成した後、 secondObject に Point オブジェクトを指定して hitTest() メソッドを呼び出します。 最初の呼び出しでは、Point オブジェクトが (不透明ではない) BitmapData オブジェクトの左上隅を定義し、 2 番目の呼び出しでは、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

この BitmapData オブジェクトが変更されたときに、BitmapData オブジェクトを参照するすべてのオブジェクト (たとえば Bitmap オブジェクト) が更新されないように、イメージをロックします。パフォーマンスを向上させるには、setPixel() メソッドまたは setPixel32() メソッドを何度も呼び出す前後に、このメソッドを unlock() メソッドとともに使用してください。

関連項目



次の例で作成される BitmapData オブジェクトは、 Bitmap オブジェクト picturebitmapData プロパティに基づいています。 その後、lock() メソッドを呼び出した後で、BitmapData オブジェクトを変更する 複雑なカスタム関数 complexTransformation() を呼び出します。(picture オブジェクトと complexTransformation() 関数はこの例では定義されません。)たとえ complexTransformation() 関数が picture オブジェクトの bitmapData プロパティを 更新した場合でも、unlock() メソッドが bitmapData オブジェクトに対して呼び出されるまでは、変更内容が反映されません。
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

ソースイメージとターゲットイメージをチャンネルごとにブレンドします。チャンネルごとに次の式を使用します。

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

redMultiplier 値、greenMultiplier 値、blueMultiplier 値、および alphaMultiplier 値は、それぞれのカラーチャンネルの乗数です。有効な範囲は 0 ~ 256 です。

パラメータ
sourceBitmapData:BitmapData — 使用する入力ビットマップイメージです。ソースイメージは、別の BitmapData オブジェクトにすることも、現在の BitmapData オブジェクトを参照することもできます。
 
sourceRect:Rectangle — 入力として使用するソースイメージの領域を定義する矩形です。
 
destPoint:Point — ソース矩形の左上隅に対応する、ターゲットイメージ (現在の BitmapData インスタンス) 内のポイントです。
 
redMultiplier:uint — 赤チャンネル値に乗算する数値です。
 
greenMultiplier:uint — 緑チャンネル値に乗算する数値です。
 
blueMultiplier:uint — 青チャンネル値に乗算する数値です。
 
alphaMultiplier:uint — アルファ透明度の値に乗算する数値です。

スロー
TypeError — sourceBitmapData、sourceRect、または destPoint が null です。


次の例では、2 つの BitmapData オブジェクトを作成します。どちらのサイズも 100 x 80 ピクセルです。最初のオブジェクトは 緑、2 番目のオブジェクトは赤でそれぞれ塗りつぶされます。このコードは merge() メソッドを呼び出し、 2 番目の 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

ランダムノイズを表すピクセルでイメージを塗りつぶします。

パラメータ
randomSeed:int — ランダムシード (乱数の種) として使用する数値です。他のすべてのパラメータを同じままにした場合、ランダムシードの値を変更することでさまざまな疑似乱数を生成できます。ノイズ関数はマッピング関数であり、真の乱数生成関数ではありません。このため、同じランダムシードから毎回同じ結果が作成されます。
 
low:uint (default = 0) — チャンネルごとに生成する最小値です (0 ~ 255)。
 
high:uint (default = 255) — チャンネルごとに生成する最大値です (0 ~ 255)。
 
channelOptions:uint (default = 7) — 任意の 4 つのカラーチャンネル値 (BitmapDataChannel.REDBitmapDataChannel.BLUEBitmapDataChannel.GREEN、および BitmapDataChannel.ALPHA) の組み合わせである数値。OR 論理演算子 (|) を使用して、複数のチャンネル値を組み合わせることができます。
 
grayScale:Boolean (default = false) — ブール値。値が true の場合、すべてのカラーチャンネルに同じ値を設定することでグレースケールのイメージが作成されます。このパラメータを true に設定しても、アルファチャンネル選択には影響しません。

関連項目



次の例では、2 つの BitmapData オブジェクトを作成し、両者に対して noise() メソッドを呼び出します。ただし、grayscale パラメータは false (最初のオブジェクトに対する noise() メソッド呼び出し)、および true (2 番目のオブジェクトに対する noise() メソッド呼び出し) にそれぞれ設定します。

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

最大で 4 つのカラーパレットデータ配列 (各チャンネルごとに 1 つの配列) を使用して、イメージ内のカラーチャンネル値をマッピングし直します。

Flash Player は以下の手順に従って、結果として得られるイメージを生成します。

  1. 赤、緑、青、アルファの各値を算出した後、標準の 32 ビット整数算術演算を使ってこれらの値を足し合わせます。
  2. 各ピクセルの赤、緑、青、アルファのチャンネル値を抽出して、別個の 0 ~ 255 の値にします。これらの値は、該当する配列で新しいカラー値を調べる場合に使用します。該当する配列には、redArraygreenArrayblueArray、および alphaArray があります。これら 4 つの配列にはそれぞれ 256 個の値が含まれている必要があります。
  3. 新しいチャンネル値を 4 つともすべて取得した後、それらの値を組み合わせて、ピクセルに適用される標準の ARGB 値にします。

このメソッドではクロスチャンネル効果をサポートすることが可能です。それぞれの入力配列は完全な 32 ビット値を含むことができます。値を足し合わせるときに移動は発生しません。このルーチンは、チャンネル単位のクランピングに対応していません。

チャンネルに対して配列が指定されない場合は、ソースイメージからターゲットイメージにカラーチャンネルがコピーされます。

このメソッドはさまざまな効果のために使用できます。たとえば、通常のパレットマッピング (1 つのチャンネルを選択して疑似色イメージに変換する) が可能です。さらに、ガンマ、曲線、平準化、量子化といったさまざまなカラー操作アルゴリズムにもこのメソッドを使用できます。

パラメータ
sourceBitmapData:BitmapData — 使用する入力ビットマップイメージです。ソースイメージは、別の BitmapData オブジェクトにすることも、現在の BitmapData インスタンスを参照することもできます。
 
sourceRect:Rectangle — 入力として使用するソースイメージの領域を定義する矩形です。
 
destPoint:Point — ソース矩形の左上隅に対応する、ターゲットイメージ (現在の BitmapData オブジェクト) 内のポイントです。
 
redArray:Array (default = null)redArraynull でない場合、red = redArray[source red value] else red = source rect value
 
greenArray:Array (default = null)greenArraynull でない場合、green = greenArray[source green value] else green = source green value
 
blueArray:Array (default = null)blueArraynull でない場合、blue = blueArray[source blue value] else blue = source blue value
 
alphaArray:Array (default = null)alphaArraynull でない場合、alpha = alphaArray[source alpha value] else alpha = source alpha value

スロー
TypeError — sourceBitmapData、sourceRect、または destPoint が null です。


次の例では、中央に赤い正方形がある緑の 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

Perlin ノイズイメージを生成します。

Perlin ノイズ生成アルゴリズムは、個々のランダムノイズ関数 (オクターブという) を補間および結合して、より自然なランダムノイズを生成する単一の関数にします。音楽のオクターブと同様、各オクターブ関数の周波数は、その前のオクターブ関数の周波数の 2 倍です。Perlin ノイズは、複数のノイズデータセットをさまざまな詳細レベルで組み合わせるので、「フラクタルノイズの和」と呼ばれてきました。

Perlin ノイズ関数を使用して、木目、雲、山脈などの自然現象や風景をシミュレートできます。ほとんどの場合、Perlin ノイズ関数の出力をそのまま表示するのではなく、他のイメージを強調したり、擬似ランダムバリエーションを与えるために使用します。

単純なデジタルランダムノイズ関数は、多くの場合、コントラストのきついポイントが含まれるイメージを生成します。このようにきついコントラストは自然界にはほとんど存在しません。Perlin ノイズアルゴリズムは、さまざまな詳細レベルで実行される複数のノイズ関数を混ぜ合わせます。このアルゴリズムの結果、互いに隣接するピクセル値の差異はより小さくなります。

メモ :Perlin ノイズアルゴリズムは、1982 年の映画「トロン」のコンピュータグラフィックを生成した後にアルゴリズムを開発した Ken Perlin 氏にちなんで命名されました。Perlin 氏は 1997 年に、Perlin ノイズ関数に関する技術的功績によりアカデミー賞を受賞しました。

パラメータ
baseX:Numberx 方向で使用する周波数。たとえば、64 ●x● 128 のイメージに見合うサイズのノイズを生成するには、baseX 値として 64 を渡します。
 
baseY:Numbery 方向で使用する周波数。たとえば、64 ●x● 128 のイメージに見合うサイズのノイズを生成するには、baseY 値として 128 を渡します。
 
numOctaves:uint — このノイズを作成するために組み合わせるオクターブ (つまり個々のノイズ関数) の数。オクターブ数を多くすると、よりきめ細かいイメージを作成できます。オクターブ数を増やすと、処理時間も長くなります。
 
randomSeed:int — ランダムシード (乱数の種) として使用する数値です。他のすべてのパラメータを同じままにした場合、ランダムシードの値を変更することでさまざまな疑似乱数を生成できます。Perlin ノイズ関数はマッピング関数であり、真の乱数生成関数ではありません。このため、同じランダムシードから毎回同じ結果が作成されます。
 
stitch:Boolean — ブール値。値が true の場合、ビットマップ塗りとしてシームレスなタイリング用テクスチャを作成するために、このメソッドはイメージのトランジションエッジをスムーズにすることを試みます。
 
fractalNoise:Boolean — ブール値。値が true の場合、このメソッドはフラクタルノイズを生成します。そうでない場合、乱流を生成します。乱流があるイメージにはグラデーションに視覚的な不連続性があるので、炎や海の波のようなシャープな視覚効果に適している場合があります。
 
channelOptions:uint (default = 7) — 任意の 4 つのカラーチャンネル値 (BitmapDataChannel.REDBitmapDataChannel.BLUEBitmapDataChannel.GREEN、および BitmapDataChannel.ALPHA) の組み合わせである数値。OR 論理演算子 (|) を使用して、複数のチャンネル値を組み合わせることができます。
 
grayScale:Boolean (default = false) — ブール値。値が true の場合、赤、緑、および青の各カラーチャンネルに同じ値を設定して、グレースケールイメージが作成されます。この値が true に設定されても、アルファチャンネルの値に影響はありません。
 
offsets:Array (default = null) — 各オクターブの x オフセットと y オフセットに対応するポイントの配列。オフセット値を操作することで、perlinNoise イメージのレイヤーをスムーズにスクロールできます。オフセット配列内の各ポイントは、特定のオクターブノイズ関数に影響を与えます。


次の例では、200 × 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

ソースイメージからターゲットイメージへのピクセルディゾルブ、または同じイメージを使用したピクセルディゾルブを実行します。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 が null です。
 
TypeError — numPixels が負の値です。


次の例では、pixelDissolve() メソッドを使って 灰色の BitmapData オブジェクトを赤いオブジェクトに変換します。その際、 すべてのピクセルの色が変化するまで、一度に 40 ピクセルずつディゾルブします。
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

所定の (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

BitmapData オブジェクトの 1 つのピクセルを設定します。この処理中、イメージピクセルのアルファチャンネルは現在の値が保持されます。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

BitmapData オブジェクトの 1 つのピクセルにカラー値とアルファ透明度値を設定します。このメソッドは setPixel() メソッドと似ています。主な違いは、setPixel32() メソッドはアルファチャンネル情報を含む ARGB カラー値を受け入れることです。

BitmapData オブジェクト内のすべてのピクセルは、乗算済みカラー値として保存されます。乗算済みイメージピクセルは、アルファデータが既に乗算された赤、緑、青の各カラーチャンネル値を保持します。たとえば、アルファ値が 0 の場合、乗算されていない値とは無関係に、RGB チャンネルの値も 0 になります。このようにデータが失われると、処理の実行時に問題が生じることがあります。BitmapData のすべてのメソッドは、乗算されていない値を受け取ったり返したりします。ピクセルの内部表現は、値として返される前に、乗算済みから非乗算に変換されます。設定処理の際は、ピクセル値が事前に乗算されてから、生のイメージピクセルが設定されます。

メモ: setPixel() または setPixel32() メソッドを繰り返し使用する場合、パフォーマンスを向上させるには、setPixel() または setPixel32() メソッドを呼び出す前に lock() メソッドを呼び出します。その後、ピクセル変更がすべて完了したら、unlock() を呼び出します。このように処理を行うと、ピクセル変更がすべて完了するまで、この BitmapData インスタンスを参照するオブジェクトは更新されません。

パラメータ
x:int — 値が変更されるピクセルの x 座標です。
 
y:int — 値が変更されるピクセルの y 座標です。
 
color:uint — 結果として生成される、ピクセルの ARGB カラーです。ビットマップが不透明な (透明でない) 場合には、このカラー値のアルファ透明度部分は無視されます。

関連項目



次の例では、setPixel32() メソッドを使用して、 透明な (alpha == 0x60) 赤い線を BitmapData オブジェクト内に描画します。

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

バイト配列をピクセルデータの矩形領域に変換します。各ピクセルごとに ByteArray.readUnsignedInt() メソッドが呼び出され、戻り値がピクセルに書き込まれます。矩形全体が書き込まれる前にバイト配列が終了した場合、関数は終了します。バイト配列内のデータは 32 ビット ARGB ピクセル値と想定されます。ピクセル読み取りの前後に、バイト配列に対するシークは実行されません。

パラメータ
rect:Rectangle — BitmapData オブジェクトの矩形領域を指定します。
 
inputByteArray:ByteArray — 矩形領域で使用される 32 ビットの乗算されないピクセル値からなる ByteArray オブジェクトです。

スロー
EOFError inputByteArray オブジェクトには、rect 矩形の領域を塗りつぶすための十分なデータが含まれていません。このメソッドは、可能な限り多くのピクセルを塗りつぶした後、例外をスローします。
 
TypeError — rect または inputByteArray が null です。

関連項目



次の例では getPixels() および setPixels() メソッドを使用して、1 つの 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

指定されたしきい値と比較してイメージ内のピクセル値をテストし、テストに適合したピクセルに新しいカラー値を設定します。threshold() メソッドを使用すれば、イメージ内のカラー範囲を分離および置換したり、その他の論理演算をイメージピクセルに対して実行することができます。

threshold() メソッドのテスト論理は次のとおりです。

  1. ((pixelValue & mask) operation (threshold & mask)) の場合、ピクセルを color に設定
  2. そうでない場合、copySource == true であれば、sourceBitmap の対応するピクセル値にピクセルを設定

operation パラメータには、しきい値テストで使用する比較演算子を指定します。たとえば、operation パラメータとして "==" を使用することにより、イメージ内の特定のカラー値を分離できます。または、{operation: "<", mask: 0xFF000000, threshold: 0x7F000000, color: 0x00000000} を使用することにより、ソースイメージピクセルのアルファが 0x7F 未満の場合に、すべてのターゲットピクセルが完全に透明になるように設定できます。アニメーション化されたトランジションやその他の効果に対して、この技法を使用できます。

パラメータ
sourceBitmapData:BitmapData — 使用する入力ビットマップイメージです。ソースイメージは、別の BitmapData オブジェクトにすることも、現在の BitmapData インスタンスを参照することもできます。
 
sourceRect:Rectangle — 入力として使用するソースイメージの領域を定義する矩形です。
 
destPoint:Point — ソース矩形の左上隅に対応する、ターゲットイメージ (現在の BitmapData インスタンス) 内のポイントです。
 
operation:String — 比較演算子 ("<"、"<="、">"、">="、"=="、"!=") の 1 つ。ストリングとして渡されます。
 
threshold:uint — 各ピクセルがしきい値に適合するか、それともしきい値を超えているかをテストするための基準となる値です。
 
color:uint (default = 0) — しきい値テストに適合した場合にピクセルに設定されるカラー値です。デフォルト値は 0x000000 です。
 
mask:uint (default = 0xFFFFFFFF) — カラーコンポーネントを分離するために使用するマスクです。
 
copySource:Boolean (default = false) — 値が true であれば、しきい値テストに適合しない場合にソースイメージのピクセル値がターゲットにコピーされます。値が false であれば、しきい値テストに適合しない場合にソースイメージはコピーされません。

戻り値
uint — 変更されたピクセルの数です。

スロー
TypeError — sourceBitmapData、sourceRect、destPoint、または operation が null です。
 
ArgumentError — operation のストリングが有効な演算ではありません。


次の例では、perlinNoise() メソッドを使って 青および赤のパターンを 1 つの BitmapData オブジェクトに追加した後、threshold() メソッドを使って最初の BitmapData オブジェクトから 2 番目のオブジェクトにこれらのピクセルをコピーします。その際、 赤の値が 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

この BitmapData オブジェクトが変更されたときに、BitmapData オブジェクトを参照するすべてのオブジェクト (たとえば Bitmap オブジェクト) が更新されるように、イメージをロック解除します。パフォーマンスを向上させるには、setPixel() メソッドまたは setPixel32() メソッドを何度も呼び出す前後に、このメソッドを lock() メソッドとともに使用してください。

パラメータ
changeRect:Rectangle (default = null) — 変更された BitmapData オブジェクトの領域。このパラメータに値を指定しない場合、BitmapData オブジェクトの全領域が変更されたと見なされます。

関連項目



次の例で作成される BitmapData オブジェクトは、 Bitmap オブジェクト picturebitmapData プロパティに基づいています。 その後、lock() メソッドを呼び出した後で、BitmapData オブジェクトを変更する 複雑なカスタム関数 complexTransformation() を呼び出します。(picture オブジェクトと complexTransformation() 関数はこの例では定義されません。)たとえ complexTransformation() 関数が picture オブジェクトの bitmapData プロパティを 更新した場合でも、unlock() メソッドが bitmapData オブジェクトに対して呼び出されるまでは、変更内容が反映されません。
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. 続いて、URLRequest オブジェクト requestloader.load() に渡されます。これにより、 表示オブジェクトを使用してイメージがメモリにロードされます。
  4. 次にイメージが表示リストに配置され、イメージは 画面の座標 x = 0、y = 0 に表示されます。
  5. 続いて、completeHandler() メソッドで次の処理が実行されます。
    • 2 番目の Loader オブジェクトと、Loader オブジェクトによって初期化される Bitmap オブジェクトを作成します。
    • 2 番目のBitmap オブジェクト duplicate を作成し、 duplicateImage() メソッドを呼び出して、元のイメージの複製を作成します。
    • BitmapData オブジェクトを作成し、duplicate オブジェクトの BitmapData オブジェクトに割り当てます。
    • 元のイメージと同じ座標、幅、高さで初期化された新しい Rectangle オブジェクトを 作成します。
    • 新しい Point オブジェクトを作成します。デフォルトでは x = 0、y = 0 に作成されます。
    • 次に示す変数を作成します。
      • operation — しきい値が元の値以上である場合に、 新しい色を適用します。
      • threshold — 各ピクセルの比較対象の値です。この例では、 アルファ 0xCC の明るい灰色に設定されます。
      • color — しきい値のテストに合格したピクセルに設定する色です。 この場合は黄色です。
      • mask — 正反対の色です。この場合は透明色の青色です。
      • copySourcefalse に設定します。これは、しきい値を満たさなかった場合には、 ピクセル値がコピーされないことを示します。イメージが複製され、 しきい値のテストに合格したピクセルだけが変更されるため、この値に意味はありません。
    • 上記の変数を使用して 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);
        }
    }
}