2016/03/18(金) [n年前の日記]
#1 [prog] GIMPのシームレスフィルタが再現できなくて悩んでいたり
Processingを使ってGIMPのシームレスフィルタを再現できないか試していたのだけど、これが上手くいかなくて。
今のところ、下のような結果になったのだけど。
_sketch_make_seamless (Processing.js版)
_sketch_make_seamless.pde (ソース)
_GIMPのシームレスフィルタ と比べると、かなり違う結果に。
今のところ、下のような結果になったのだけど。
_sketch_make_seamless (Processing.js版)
_sketch_make_seamless.pde (ソース)
_GIMPのシームレスフィルタ と比べると、かなり違う結果に。
◎ GIMPのシームレスフィルタの結果を検証。 :
例えば、以下の画像を元画像とした場合。見えにくいけど、左上が真っ黒、右下が真っ白、それ以外は透明になってる画像。
GIMPのシームレスフィルタをかけると、以下のような画像になる。
画像を4分割して、左上の領域と、右下の領域が合成されて、その合成結果が両方に描かれてる状態、とでも言うか。ちなみに、右上の領域と左下の領域も合成されて、両方に同じ内容が描画されているのだけど。
これを、今回 Processing で書いたソレで試してみると、以下のようになる。
違いがお分かりいただけるだろうか。って全然違いますがな。そもそも同じ内容が描画されてないので、これではシームレスにならない。
この白黒のグラデーションは、2つの画像を合成する時の割合に相当するはず。つまり、x と y の値を使って、このグラデーション画像を生成する式さえ分かれば、GIMP のシームレスフィルタだって再現できるはず。
なのだけど。その式が分からない。思いつかない。どういう式にすれば、こういうグラデーションが描けるのだろう。
これは GIMPのソースを眺めてみるしかないかなと、GIMP 2.9.2 のソースをDLして解凍してgrepしてみたけど、それらしい部分が見つからなくて。gegl:tile-seamless だか plug_in_make_seamless_invoker だか、そのへんが関係してそうな気もするのだけど、どこに処理が書いてあるのやら。
GIMPのシームレスフィルタをかけると、以下のような画像になる。
画像を4分割して、左上の領域と、右下の領域が合成されて、その合成結果が両方に描かれてる状態、とでも言うか。ちなみに、右上の領域と左下の領域も合成されて、両方に同じ内容が描画されているのだけど。
これを、今回 Processing で書いたソレで試してみると、以下のようになる。
違いがお分かりいただけるだろうか。って全然違いますがな。そもそも同じ内容が描画されてないので、これではシームレスにならない。
この白黒のグラデーションは、2つの画像を合成する時の割合に相当するはず。つまり、x と y の値を使って、このグラデーション画像を生成する式さえ分かれば、GIMP のシームレスフィルタだって再現できるはず。
なのだけど。その式が分からない。思いつかない。どういう式にすれば、こういうグラデーションが描けるのだろう。
これは GIMPのソースを眺めてみるしかないかなと、GIMP 2.9.2 のソースをDLして解凍してgrepしてみたけど、それらしい部分が見つからなくて。gegl:tile-seamless だか plug_in_make_seamless_invoker だか、そのへんが関係してそうな気もするのだけど、どこに処理が書いてあるのやら。
[ ツッコむ ]
以上です。