2019/11/20(水) [n年前の日記]
#1 [gimp] gimp-texturizeのソースをまだ眺めてる
先日、手元の環境 ―― Windows10 x64 1903 + GIMP 2.10.14 32bit Portable samj ビルド版なら、gimp-texturize プラグインを実行した際にクラッシュしないよう修正できたわけだけど。
いくつか気になる点があるので、まだソースを眺めていたり。
いくつか気になる点があるので、まだソースを眺めていたり。
◎ difference()内のループについて。 :
先日修正したソレは、元画像の右端に達したら左端に、下端に達したら上端に戻す感じで、ピクセルを調べていくように書いてみたのだけれど。
元々のソースでは、右端だの下端だの、そのへん気にせずに、ひたすらポインタをインクリメントしてピクセルを調べていくわけで…。自分が修正したソレは、クラッシュはしないものの、かなり違う結果になってしまいそうだなと。
であれば、元画像の端でループさせず、画像サイズ内ならピクセルを見るけど、画像サイズ外ならピクセルを見ないような処理に書き換えたら、今まで得られていた結果に多少は近づくのだろうか。試しにその方向で修正・実験してみたり。
しかし、得られた生成画像は、どちらも変わらず…。
結局のところ、どちらの処理も、「生成画像の中から、元画像とほぼ同じ個所を探して、座標を返す」という点では似たような結果が返ってくる、ということなのかもしれない…。
ちなみに、処理時間については、画像サイズ外を無視するほうが速そうな予感。チェックしてる座標が元画像の右端、もしくは下端を超えたと分かったら、その時点でループから抜けることができるので。
元々のソースでは、右端だの下端だの、そのへん気にせずに、ひたすらポインタをインクリメントしてピクセルを調べていくわけで…。自分が修正したソレは、クラッシュはしないものの、かなり違う結果になってしまいそうだなと。
であれば、元画像の端でループさせず、画像サイズ内ならピクセルを見るけど、画像サイズ外ならピクセルを見ないような処理に書き換えたら、今まで得られていた結果に多少は近づくのだろうか。試しにその方向で修正・実験してみたり。
しかし、得られた生成画像は、どちらも変わらず…。
結局のところ、どちらの処理も、「生成画像の中から、元画像とほぼ同じ個所を探して、座標を返す」という点では似たような結果が返ってくる、ということなのかもしれない…。
ちなみに、処理時間については、画像サイズ外を無視するほうが速そうな予感。チェックしてる座標が元画像の右端、もしくは下端を超えたと分かったら、その時点でループから抜けることができるので。
◎ GIMPと連携する部分について。 :
gimp-texturize 実行後、「フィルターの再適用」を呼ぶとクラッシュするあたりが気になって、そのあたりを眺めていたり。main.c 及び main.h 内に、GIMPプラグインとしてのお約束がほとんど書かれているように見えるので、そこがバグっているはずだけど…。
GIMPプラグインのテンプレートとして、plugin-template なるものがあるらしく。
_Index of /pub/gimp/plugin-template
_GIMP Developer Resources - Plug-In Development
_how to write a GIMP plug-in 勝手和訳 2P目 - AOISAKURA - 日記(2005-10-22)
_[gimp] how to write a GIMP plug-in 勝手和訳 2P目 - AOISAKURA - 日記(2005-11-12)
_[gimp][translation] how to write a GIMP plug-in 勝手和訳 3P目 - AOISAKURA - 日記(2006-03-27)
そのソースや各解説と照らし合わせつつ眺めてみたけれど、GIMPプラグインとして働かせるための記述については、コレといって違いはなかった。
また、gimp-texturize は、おそらくは plugin-template に実処理を追加する形で書かれたのだろう、とも思えてきた。というのも、gimp-texturize の中で書かれてはいるけれど実際には使われてない乱数関係の記述が、plugin-template 内のソレと全く同じだったので。
さておき。「フィルターの再適用」を呼ばれると、run_mode が GIMP_RUN_WITH_LAST_VALS になった状態でプラグインが呼ばれるわけで…。そのあたりを通った時も、動作に必要なパラメータが入るように修正したら、「フィルターの再適用」をしてもエラーを出さずに動くようになった。
要は、gimp_set_data() でパラメータをどこかに保持して、次回、run_mode が GIMP_RUN_WITH_LAST_VALS になってる状態で呼ばれた際は、gimp_get_data() でパラメータを取得して使えばいい。
GIMPプラグインのテンプレートとして、plugin-template なるものがあるらしく。
_Index of /pub/gimp/plugin-template
_GIMP Developer Resources - Plug-In Development
_how to write a GIMP plug-in 勝手和訳 2P目 - AOISAKURA - 日記(2005-10-22)
_[gimp] how to write a GIMP plug-in 勝手和訳 2P目 - AOISAKURA - 日記(2005-11-12)
_[gimp][translation] how to write a GIMP plug-in 勝手和訳 3P目 - AOISAKURA - 日記(2006-03-27)
そのソースや各解説と照らし合わせつつ眺めてみたけれど、GIMPプラグインとして働かせるための記述については、コレといって違いはなかった。
また、gimp-texturize は、おそらくは plugin-template に実処理を追加する形で書かれたのだろう、とも思えてきた。というのも、gimp-texturize の中で書かれてはいるけれど実際には使われてない乱数関係の記述が、plugin-template 内のソレと全く同じだったので。
さておき。「フィルターの再適用」を呼ばれると、run_mode が GIMP_RUN_WITH_LAST_VALS になった状態でプラグインが呼ばれるわけで…。そのあたりを通った時も、動作に必要なパラメータが入るように修正したら、「フィルターの再適用」をしてもエラーを出さずに動くようになった。
要は、gimp_set_data() でパラメータをどこかに保持して、次回、run_mode が GIMP_RUN_WITH_LAST_VALS になってる状態で呼ばれた際は、gimp_get_data() でパラメータを取得して使えばいい。
[ ツッコむ ]
以上、1 日分です。