このページの最終更新
 2008/09/13

Paint.NET公式サイト↓
マニュアルメニュー TOP 機能と使い方 プラグイン レタッチ例 効果使用例 ギャラリー
ゼロから作るオリジナルプラグイン
3.線画の抽出プラグインを作る!(基本プログラム作成編)

 これは、私が次に作った、ちょっとだけプログラムらしいプログラムです。「お絵かき初級」のビデオ「How to Draw Vol.2」で線画を抽出するのに、Curves+でややこしい操作を2回やってるのですが、クリック一発で抽出するプラグインです。

(1)日本語プログラムの前に分析!

 前回は実際にやった作業を日本語に置き換えました。今度はその応用です。実際の作業は、Curves+がやってますので、先ずその内容を理解しないとプログラムは作れません。
 理解するといっても、誰も教えてくれませんから、自分で分析して理解するしかありません。「あ”〜やっぱり無理だ〜!!!」
って、言わないでください(^^;)
 処理前と処理後を比べて何が変わってるか調べるだけです。幸い、今やろうとしてるのは色と透明度の違いだけですから、全部スポイト(色の選択)で調べることが出来ます。

 白のカンバスに黒でラインを描きます。スポイトでRGBAを調べます。当然、一番濃い所は(0,0,0,255)、アンチエイリアスのところは、(135,135,135,255)(32,32,32,255)など、色々変わりますが、RGBは同じ値、Aは必ず255です。ま、当たり前なんですが、この当たり前をしっかり理解しましょう。
黒の線画は全て R=B=G,A=255

 次にCurves+でAdvaced-「Key/Black→Alpha」をかけて、さっきと同じピクセルの色を調べます。(0,0,0,255)(135,135,135,120)(32,32,32,223)
元のRGBはそのままで、Aだけ変化します。でもなにか法則性を感じます。AとRGBのどれでも、足した値は255になります。
ピンときました!
処理1 RGBはそのまま、A=255−RまたはA=255−GまたはA=255−B

次にCurves+でAdvaced-「Key/Black→Luminosity」でグラフを寝かせます。
今度は、全てのRGBが0になり、Aはそのままです。
処理2 R=B=G=0、Aはそのまま


さあ、分析ができ、法則も分かったので、これで日本語プログラムを考えてみます。

(2)日本語プログラム


とりあえず、白黒の線画限定ということで、簡単に考えます。処理1では、アルファに代入するのは、RGBどれでも良いので、Rにしてみます。

1.カレントピクセルのアルファに(255−カレントピクセルのR)を代入する
2.カレントピクセルのRに0を代入する
3.カレントピクセルのGに0を代入する
4.カレントピクセルのBに0を代入する


(3)C#プログラム

さっそく、CodeLabに書いていきます。前回の色塗線変換のCSファイルを読み込み、1行プログラムを消します。先ずは1行目
CurrentPixel.A = (255−CurrentPixel.R) ;
いきなり、エラーメッセージがでました(笑)
何が、悪いのでしょう?数式は使えない?そんな事ないでしょう。試しに(255−128)にしてみました。エラーは出ません。画像も半透明になりました。どうも、数字と単語の引き算がマズイようです。でも、この単語には数値が入ってるんですよね?ぼちぼち、単語っていうの止めましょうね(笑)特殊みたいだけど、数値が入ってるんだからいわゆる変数ですよね。サンプルプログラムを思い出します。(byte)というのが、ありましたね。(byte)を加えてみます。
CurrentPixel.A = (byte)(255−CurrentPixel.R) ;
今度はエラーはでません。画像も透明になりました。成功です。この(byte)ってなんなんでしょう?調べてみましたが、良く分かりません(爆)0-255の整数を扱う呪文のようです(単語の次は呪文かい!ひとりツッコミ)使ってるウチにだんだん分かるでしょう。
後は、問題ありません。基本的なプログラムができました。


早速試してみます。CodeLabのOKをクリックしたら、ウインドウを閉じます。白に黒で線を描きます。CodeLabを呼び出し、Buildをクリック。バッチリですね。念の為、スポイトで色を確認します。どこのピクセルを拾っても、RGBは0、アルファだけが変化してます。これで完成!!プログラムをCSファイルで保存します。DLLにしないのかって?もうちょいやりたい事があるんですよ(^^)
もし、これでいいや、って人は前回のDLLファイルの作り方を参考にプラグインにして下さい。

今回のまとめ

●どのようにプログラムしたら良いか分からないときは、実際の作業を分析して法則を見つける。
●変数の演算には(byte)の呪文を使う。
●プログラムが完成したら、本当に期待した結果になってるか確かめる。


これで、目的は達成してるのですが、前回の色塗線変換はプライマリーカラー対応になってますから、これも同じにしたいですね。次回はその辺に挑戦していきます。

前の記事に戻る  目次へ戻る  次の記事へ進む
inserted by FC2 system