- 2008年10月 3日 02:30
- ActionScript 3.0
気がついたら9月はなんも書いてない!やばい!
初期のペースは異常。( という言い訳をしてみる。 )
というわけで、書かないと!と思い、過去の下書きを引っ張り出してきた。
--- 以下 下書きのまんま ------------------------------
さて、最近ひたすらWebカメラやらBitmapやらを弄っておるわけですが
毎回LiveDocs開いて調べるの面倒だし、いろんなBlogを見て回るのも大変なので
今自分に必要な事だけまとめておくことにします。
初期のペースは異常。( という言い訳をしてみる。 )
というわけで、書かないと!と思い、過去の下書きを引っ張り出してきた。
--- 以下 下書きのまんま ------------------------------
さて、最近ひたすらWebカメラやらBitmapやらを弄っておるわけですが
毎回LiveDocs開いて調べるの面倒だし、いろんなBlogを見て回るのも大変なので
今自分に必要な事だけまとめておくことにします。
BitmapData処理では、二つの引数が頻繁に出てきます。
それは destPoint:Point と sourceRect: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をメインに書いていこうと思います。
--- 以上 下書き -------------------------------------------
あー、下書きだけに微妙なまとめっぷり・・・
もしコメントに要望とかがきたらしっかりまとめます。
うーむなんか風邪ひいたっぽいなぁ・・・
- Newer: 365日時計 をリリースします
- Older: AS3.0 円を描くとかそういうのの検証