この日記はGNSで生成しています。 |
_ 塩兄のクロスフェードのコードを見ていて、ふと思い出したのでメモから写しておく。Photoshopの「下のレイヤーと統合」に相当する、RGBA+RGBA→RGBAなビットマップ合成アルゴリズム*1。
*1: RGBA=ARGBともいう。「アルファ付きRGB」の意味。
// Cs: 上になる画像のカラー(RGB) // As: 上になる画像のアルファ // Cd: 下になる画像のカラー(RGB) // Ad: 下になる画像のアルファ // Cr: 合成結果画像のカラー(RGB) // Ar: 合成結果画像のアルファ // すべて0.0〜1.0で扱う if ( As + Ad == 0.0 ) { // 別扱いしないと0除算エラーが出る Ar = 0.0; Cr = 0.0; } else { Ar = Ad + ( ( 1 - Ad ) * As ); Cr = ( ( Cd * Ad * ( 1 - As ) ) + ( Cs * As ) ) / Ar; }
_ GIMPのレイヤ合成とか吉里吉里のレイヤ合成とかでコードは探せばあるはずだが、ちょっと検索した限りではアルゴリズムは見つからなかったので、ちょっとは書いておく価値はあるかな・・・と思ったら、やねうらお氏の「スーパープログラマーへの道」第CB回の文章部(コードではない)で発見。「PhotoShopのレイヤ合成は、エネルギー分配に基づくもので〜」以下の部分ね。\
_
なお、クロスフェードに使う場合は「Adへの倍率を1.0→0.0へ変化させながら、Asへの倍率を0.0→1.0へ変化」させることになる。
メールはこちらへ...[後藤浩昭 / Hiroaki GOTO / GORRY / gorry@hauN.org]