BitmapData#threshold

2012 / 07 / 03 by
Filed under: Coding の素 
Bookmark this on Delicious
[`livedoor` not found]
[`yahoo` not found]

少しでも時間を置くとすぐに忘れてしまう 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 も若干の注視が必要になるってところでしょうか。
それ以外の引数は取り立てて問題はないですね。

第7引数について
リファレンスガイド では以下のように書いてあります。

mask : uint (default = 0xFFFFFFFF)
カラーコンポーネントを分離するために使用するマスク。

この mask の設定次第で、アルファ値、赤、緑、青の色のいずれかの要素のみに対応した閾値テストができるということ。

mask = 0xFF000000 でアルファ値のみ。
mask = 0x00FF0000 で赤要素のみ。
mask = 0x0000FF00 で緑要素のみ。
mask = 0x000000FF で青要素のみ。
デフォルトの mask = 0xFFFFFFFF なら全要素が閾値テスト対象になるってことですね。

ここいらへんのところは Actionscript の神の書のひとつ "Foundation ActionScript 3.0 Image Effects" の P218 ~ 219 にかけて、バイナリデータの模式図でもって分かりやすく解説されています。

ところでこのマスク、理論上 mask = 0x00FFFF00 とか mask = 0xFF00FF00 なんてのも可能ですが、そういった値は実質的には無意味と思われるので、上に列記した4つだけという認識で良いんでしょう。

個人的にはグレイスケール画像に対して BitmapData#threshold を使う場合が多いので、mask の値は 0x000000FF 、threshold の値が 0x00~0xFF の間のいずれか、というパターンで、キミに決めた! という感じすかねぇ。
グレイスケールなら mask の値は 0x00FF0000 でも 0x0000FF00 でも同じですが、そうすると threshold の値を 0x000000 ~ 0xFF0000 や 0x0000 ~ 0xFF00 にしなければならなくなるんで、青チャンネルを使うのが一番分りやすいっす。



Comments

Tell me what you're thinking...
and oh, if you want a pic to show with your comment, go get a gravatar!





WP-SpamFree by Pole Position Marketing