ディザ法(1)
白と黒の2色だけで、カラーイメージの自然な濃淡を表現する方法。今回はディザ法について見てみます。
閾値法は、イメージデータの全ピクセルを同一の閾値で判定し、白か黒に置き換える方法でした。対してディザ法は、ピクセルごとに異なる閾値で判定し、白か黒に置き換える方法です。
如何にしてピクセルごとに異なる閾値を設定するのか。その設定手段により、ディザ法は以下の2つに分けられます。
- ランダム・ディザ法
- 組織的ディザ法
その他にもディザ法はあるっぽいんですが、この2つだけを扱います。
ハーフトーニング
今のコンピュータはリソースが潤沢なので、画像処理における2値化といえば、閾値による2値化(閾値法)だけを注目してればいいんじゃないか、というのが個人的な印象。
ところで閾値法はイメージデータの全ピクセルを同一の閾値で処理するから、黒い領域と白い領域がベタっと分離してしまいますよね。
かつてコンピュータがモノクロ表示しかできなかった時代、あるいはモノクロプリンタで印刷する場合、カラーイメージをどのようにして表示ないしは印刷するか、ということを追求し、閾値法とは異なる2値化の方法で、自然な濃淡が表現されたとのこと。
で、これからしばらくは、その自然な濃淡を表現する2値化の種類と ActionScript 3.0 による実装の話。
Strategy パターン
今回 wonderfl に投稿したのは、何の変哲もない、特筆すべきこともないピクセレート・プログラムです。
Pixelate by BitmapData#fillRect – wonderfl build flash online
このコードのオレ的ポイントは何かというと、コーディングに当たって Strategy パターン を意識したという点。
プログラム実行時に複数あるアルゴリズムを選択するパターンだそうですが、ボタンを押して表示形状を変えるところに Strategy パターンを導入しています。
BitmapData#threshold
少しでも時間を置くとすぐに忘れてしまう BitmapData#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() メソッドで押さえとくべきツボは何といっても第7引数 mask。
あと、その第7引数に指定した値によって、第5引数 threshold も若干の注視が必要になるってところでしょうか。
それ以外の引数は取り立てて問題はないですね。
Magnet Fractal Type II
今回は Magnet Fractal その2、Magnet Fractal Type II です。
