Paint.NETのプラグインを作ってみた

http://www.getpaint.net/

マイクロソフトが開発を支援してるらしきペイントソフト。
ソースが公開されていて、C#メインで作られてる。


従来どおり、この手のソフトはプラグインで機能拡張できるので、とりあえずハイトマップ→ノーマルマップ変換Effectプラグインを作ってみた。

http://www.geocities.jp/anderson_luis_de_souza/


インストールしたディレクトリにあるPaintDotNet.Effects.dllとかが外部公開向けのアセンブリで、こいつらにプラグインの基底クラスが入っている。
それらを派生して実装すればプラグインができる。


プラグイン作成向けのドキュメントが見当たらなかったので、簡単にメモ

  • Effectプラグインの本体はPaintDotNet.Effects.Effectを継承して実装。Renderメソッドが肝
  • プラグインのパラメータを操作するダイアログはPaintDotNet.Effects.EffectConfigDialogを継承して実装
  • プラグインのパラメータはPaintDotNet.Effects.EffectConfigTokenを継承して実装。こいつでダイアログとプラグイン本体間のパラメータのやりとりをする
  • PaintDotNet.Effects.Effect.RenderはPaint.NET本体から別スレッドで呼ばれるっぽいのでスレッドセーフにしておかないとダメ


最後のスレッドセーフ云々はRenderArgsのSurfaceを直に弄る分には意識しなくても大丈夫っぽいけど、GDIのGraphics経由で弄るならlock(dstArgs.Graphics)としておかないと実行時に落ちるので注意。


大体こんなところかなー。