Home > ActionScript 3.0 > AS3.0 Bitmap処理を思い出すの面倒だからまとめておく

AS3.0 Bitmap処理を思い出すの面倒だからまとめておく

気がついたら9月はなんも書いてない!やばい!
初期のペースは異常。( という言い訳をしてみる。 )

というわけで、書かないと!と思い、過去の下書きを引っ張り出してきた。

--- 以下 下書きのまんま ------------------------------

さて、最近ひたすらWebカメラやらBitmapやらを弄っておるわけですが
毎回LiveDocs開いて調べるの面倒だし、いろんなBlogを見て回るのも大変なので
今自分に必要な事だけまとめておくことにします。


BitmapData処理では、二つの引数が頻繁に出てきます。
それは destPoint:PointsourceRect:Rectangle です。

これらは主に何に使用するかというと
BitmapDataのどの位置を処理するか、という範囲指定に使います。

基本的に BitmapData クラスのメソッドで要求される Point と Rectangle は
BitmapData のどの位置( Point )からどこの範囲まで( Rectangle )を処理するのかの指定です。
やたら要求される上に、毎回 new Rectangle( .... とかやってると大変なので
処理する BitmapData のサイズが不変であれば
var bitmapRect:Rectangle =
    new Rectangle( 0, 0, BitmapDataの横幅, BitmapDataの縦幅 );

var destPoint:Point = new Point( 0, 0 );

とかやっといちゃっても良いと思います。

あと、注意すべきは当たり前っちゃ当たり前ですが参照ですかね。例えばベースとなる画像に
いくつかの処理を実行して、更にレイヤーで重ねて・・・などをやるときに
// 定数やらを定義.
var bmpData:BitmapData = 処理したいビットマップデータ;
// 色を変えーの
var redBmp:BitmapData = bmpData;
redBmp.colorTransform( bitmapRect, new ColorTransform( 1.2 ) );
// 黒色透過させーの
var alphaBmp:BitmapData = bmpData;
alphaBmp.threshold( alphaBmp, bitmapRect,
                               destPoint, "==", 0xff000000, 0x000000 );
   :
   :
とかやっちゃうと、全部同じ BitmapData に処理入ってしまいます。
( var redBmp:BitmapData = bmpData; は複製ではない )
まあ、これはあたりまえか。ちなみに複製は BitmapData.clone() で出来ます。

諸注意終わったところで、とりあえず今回は似ていて解りにくい(のか?)
copyChannel, copyPixels, draw の3つのメソッドの説明を書いてみようかと


BitmapData.copyChannel


BitmapData.copyChannel は別の BitmapData から,特定のチャンネルをコピーするものです。
ここでいうチャンネルとは、RGBAの4つ色情報の事をさします。
ちなみに、flash.display.BitmapDataChannel に定数も用意されとりますです。

また、パッと聞いただけでは気づきにくい利点として
GREENチャンネルをALPHAチャンネルへコピーとかが出来ちゃったりします。

引数は全部で以下の5つ

sourceBitmap:BitmapData

sourceRect:Rectangle

destPoint:Point

sourceChannel:uint

destChannel:uint


sourceRect と destPoint は前述のとおり範囲指定です。
destChannel は どのチャンネルにコピーするかを指定します。
sourceChannel を GREEN、destChannel を ALPHA にすると先ほど述べた
GREENチャンネルをALPHAチャンネルへコピーになります。

■ BitmapData.copyPixels


BitmapData.copyPixels は別の BitmapData から,指定した部分のピクセル情報をコピーするものです。
例えば、画像の上半分だけ持ってきてコピーとかが出来ます。

引数は全部で以下の6つ

sourceBitmap:BitmapData

sourceRect:Rectangle

destPoint:Point

alphaBitmapData:BitmapData = null

alphaPoint:Point = null

mergeAlpha:Boolean = false


sourceRect と destPoint は前述のとおり範囲指定です。
残りの3つは alpha の処理を追加で指定できます。コピーするんだけどアルファは変える
といった時に使えます。

■ BitmapData.draw


BitmapData.drawは文字通りBitmapDataに新しいBitmapDataを書き込む処理ですが
これが意外と重いので(過去記事参照)、BitmapData から BitmapData へのコピーなら
copyPixels がオススメです。あと、やるときはlock() unlock() も併せて使うといいかも。

引数は全部で以下の5つ

source:IBitmapDrawable

matrix:Matrix = null

colorTransform:ColorTransform = null

blendMode:String = null

clipRect:Rectangle = null

smoothing:Boolean = false


Matrix は書き込む際に回転させたり、拡大縮小したりするために使います。
colorTransform と blendMode は MovieClipなどでやる同名の処理と一緒です。
clipRect は sourceRect とほぼ一緒、かな?
smoothing は Matrix を利用して変形して書き出す際に、スムージングの処理を行うかを指定出来ます


簡単になりましたが、以上で今回のまとめは終了です。
その2ではある意味ヘヴィなapplyFilterをメインに書いていこうと思います。

--- 以上 下書き -------------------------------------------

あー、下書きだけに微妙なまとめっぷり・・・
もしコメントに要望とかがきたらしっかりまとめます。

うーむなんか風邪ひいたっぽいなぁ・・・

Comments:0

Comment Form

コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。

Trackbacks:0

TrackBack URL for this entry
http://blog.flair4.jp/mt/mt-tb.cgi/32
Listed below are links to weblogs that reference
AS3.0 Bitmap処理を思い出すの面倒だからまとめておく from flair4 blog

Home > ActionScript 3.0 > AS3.0 Bitmap処理を思い出すの面倒だからまとめておく

Search
Feeds

Return to page top