反対色でない BlendMode.INVERT 表現
2009/06/12 22:16 - AS3.0
おいおまえら! BlendMode.INVERT は好きだよな?
私は大好きです。
New Order という過去に作った SWF ではムダに INVERT 使ってますよ。
東京てら子で発表した時計でも、かなり INVERT を使いました。 「東京てら子 5」に行ってきた(後編)-アナログ時計編-の半円形針以降は全部そう。
あと、ウチのサイトやブログのバナーやファビコンはまさしくソレ。 まぁフォトショップなので INVERT じゃなくて「差の絶対値」や「除外」ですけどね。
わりと近ごろ目を惹いた INVERT といえば、やっぱ「FONTPARK 2.0」の上端にあるメニューでしょ。萌えるぅ!
そんな INVERT 大好きっ子なワタクシですが、実は気に障ることもあるんです。
INVERT の仕様上、異を唱えるのは非常識極まりないことは重々承知しているんですが、頭は納得しても心は納得しない。
それは色の取り合わせが反対色になるということです(まあ当たり前のことなんですけどね)。
白と黒という無彩色の組み合わせは実に美しいと感じます。でも有彩色の反対色の組み合わせは大嫌い。
赤(0xFF0000)と水色(0x00FFFF)とか、緑(0x00FF00)と紫(0xFF00FF)とか、気持ち悪いですよね。 原色同士でなくとも、たとえば草色(0xCCFF33)なら紺(0x3300CC)になって、美しい取り合わせとは思い難い。
そんなわけで前々から、たとえば赤と白とか、青と白とか、黄と黒とか、反対色でない色の取り合わせで、重なった部分が反転するようなことはできないかなぁ、と漠然と思っていましたそんな日々、やっとその方法を見つけましたよバンザイ。
きっかけは "Foundation Actionscript 3.0 Image Effects"。
第2章は "Filters and Blend Modes" というタイトルで、ブレンドモードとフィルターの順番で説明がなされています。
で、ブレンドモードの説明では、各モード選択時、二つの色がどのような計算をされ、どのような結果を返すのか、という計算式があるんですが、それが ActionScript で function としてコード化されているんです。
それらを見ていて、反対色でない BlendMode.INVERT 表現について閃きましたよ。 INVERT と LIGHTEN もしくは、INVERT と DARKEN を組み合わせれば良いんだ!
まぁ、ライブヘルプの BlendMode とか、DisplayObject.blendMode を読み込んでればフツーに思いついたのかも知れませんが、文章で説明されてても直感的には理解はしづらいっす。
その点 ActionScript のコードなら、右脳で認識チックに直感的な理解が可能。
これだけも "Foundation Actionscript 3.0 Image Effects" 買った甲斐あり。
たとえば、BlendMode.ADD では以下のように記述されています。
なお、topPixel、bottomPixel ってのは 0xCCFF33 みたいなRGB カラーでなくて、R、G、B の色の各要素です。
まぁ ADD は計算式見なくても予想はつくけれど、HARDLIGHT や SCREEN といったものは、式を見てはじめて、ああ、こういう計算になるんだぁ、って感じでしたよ。
"Foundation Actionscript 3.0 Image Effects" はまだ第2章までしか読めていませんが、これからも新しい知見が多く得られそうで楽しみです。
では最後に駆け足で、反対色でない BlendMode.INVERT 表現の実例について。
各サンプルには、実は正方形が3つあるんです。
二つはステージ内に充分入りきるサイズの黒(0x000000)い正方形(以下「tile1」と「tile2」)。
一つがステージを覆うサイズの黄色(0xFFCC00)い正方形(以下「tile3」)。
で、背景色は白(0xFFFFFF)です。
tile1、2では INVERTを、tile3では LIGHTEN または DARKEN を BlendMode に指定します。 tile1、2、3の順に addChild() すると、このような反対色でない BlendMode.INVERT 表現になるわけです(まぁ tile1 は無指定でいいんですけどね)。
tile1、2はドラッグ可。動かしてその INVERT っぷりを試してみてくださいっす。