プラグイン作成について

レイヤープラグインの作成に関してです。
koppe panさんの<レイヤーブレンドの作成方法>のおかげで、自分でも作れる! と思ったけど苦労したので・・・。
プラグインを作りたい方への補足説明になればと思います。

■ Microsoft Visual C++ 2008 Express Edition
これを検索すると、マイクロソフトのページだとMicrosoft Visual Studio 2008 Express Edition SP1 が出てきます。
これは
Visual Basic 2008 Express Edition
Visual C# 2008 Express Edition
Visual C++ 2008 Express Edition
Visual Web Developer 2008 Express Edition
これら4種のアプリケーションがセットになったもののようです。
しかも.ISOのイメージファイルorz

C++以外は不要なので、http://homepage2.nifty.com/nonnon/Chinamini/20110001/20110307.htmlここからDLしました。


■ 1つのレイヤーモードで4種作成
koppe panさんが書いてくれていますが、
//合成を行う関数
//下のレイヤーと結合
と、あります。「表示させるだけ」と、「下のレイヤーと結合」は別計算ってことですね。
そして、カラー用とグレースケール用の2種があるため、レイヤーモードは1つでも記述は4種必要ということになります。

私はまず、表示用(合成を行う関数)の、カラー用から作成しました。
それが完成したら、グレスケ側にコピペ。
グレスケは色情報が1つなので、*(dst + 1)こういうカラー用を削除します。それでOK。
下のレイヤーと結合も、表示用(カラー)をコピペ。
こちらは計算に使っていた*(dst + 1)こういうのを*(base_col + 1)に変更して、*(dst + 3)を増やして、*base_alphaを計算に組み込めばOK。

「下のレイヤーと結合」のカラー用が上手くいけば、それをグレスケ用にコピペします。
カラー用の部分を削除するだけです。


■ 肝心の計算部分
見本があるなら、計算式を探して試して探して試してを繰り返します。
ビビットライト・リニアライト・ピンライトは、フォトショップ7と同じ色合いを目指して作りました。
(数値が1or2ずれるのは諦めた)
計算式が見つかっても、アルファ値の入れ方が分からず困ったのですが、これらはよく見ると不透明度100%でまず固定されていました。
アルファ値を混ぜて計算してはいけなかったのですね。
なので、まずはアルファ値無視で色データを計算し、それからアルファ値を入れて、下にある全てのレイヤーのRGBと組み合わせた計算をしました。

んで。基本は1ドットに対する計算のようで。
while (col < col_end) {
(略)
alpha += alpha_step;
col += col_step;
dst += col_step;
}
この繰り返し記述を削除して黒指定すると、左端から64pixel×64pixelごとに1ドット描画されます。
_stepで次のピクセルに進みます。
dst += col_step*4; と書くと、5pixel目に描画されます。
dst += col_step*64; だと、2行目の左端。

64pixel×64pixelは固定で、猫ペの本体側で分割&繰り返ししているようです。
砂トーン2pixel×2pixelは、1ドットの結果で他3箇所も決めなければならなかったので、この_step;で位置指定して描画を行ったり来たりしています。


■ 「下のレイヤーと結合」はアルファ値の計算が増える
私が泣かされた部分です。
ビビットライトとかの、下のレイヤーの不透明度が下がってるときの計算は諦めましたし・・・。
検索しても、アルファ値混ぜた計算式は載っていないんですよね。

表示用のときには省略しても良かったけど、結合用だと透明なら透明だと指定する必要があります。
結合してみると黒くなった という時は、アルファ値の指定が足りてない可能性が高いです。
まぁ、肝心の計算式が思いつかなければどうしようもないんですけどねorz

ちなみに、アルファ値も色と同じで上限255です。
不透明度80%だとすると、内部データのアルファ値は204です
描画色R70,G140,B226 で下の色がR255,G255,B255のとき、不透明度80%ならば
R 70×(204/255) + 255×(1-204/255) = 107
G 140×(204/255) + 255×(1-204/255) = 163
B 226×(204/255) + 255×(1-204/255) = 231.8
となります。
アルファ値は描画とレイヤーの2箇所にあるはずですが、*alpha は両方を含んでいるっぽいですね。
自分はこの辺り理解できていませんが・・・。
*記号のついたものは特別! としか思ってなくても、肝心の計算式と描画範囲さえわかっていればどうにかなります。

2013/2/15 追記
ビビットライト・リニアライト・ピンライトの結合時の計算式は思い違いをしていました。
表示用と同様、不透明度100%の計算をしてから通常レイヤーと同じアルファ値を入れた計算をする。
私は単に通常レイヤーの結合用のアルファ値混ぜた計算式を分かってなかっただけでした・・・。
リニアライト用とかの計算方法が必要だと思ってたよorz

計算式はこちらのサイト
ロジカルめがね」 → 不透明度付きピクセルのブレンドモード付き合成方法

面倒だったのは、先にアルファ値を0〜1の数値にする為に /255 としていても、小数点が切り捨てられていたこと。
・・・と思ったら、unsigned が邪魔だったのか。
unsigned int の int は知ってるから double に変更してたんですけどね。
小数点切捨てられるのが unsigned の所為だとは思わなかったorz

posted by むらせ at 2013年02月06日 03:46 | レイヤープラグイン/テクスチャ | このブログの読者になる | 更新情報をチェックする

色相変更スライダー レイヤープラグイン

猫ペイントのトーンカーブ(HSV)はスライダー式ではないので、レイヤーブレンドを利用して色相をスライダーで変更可能にしました。
hsv_h_slider.zip ←ダウンロード

DLしてZIP解凍後、hsv_h_slider.dll を pluginフォルダ内の blendフォルダに入れると使えるようになります。

スライダー2.png

グループ化にチェックは、色相変更したい対象の不透明度が100%なら不要です。
特定の色を指定したい場合は、通常のトーンカーブが指定し易いです。
このレイヤーブレンドでは色の範囲指定は不可能です。
それでもレイヤーブレンドを使うなら、全体を塗り潰さずに変更したい箇所だけを塗ってください。

ソースはテキストファイルで公開しておきます。
hsv_h_slider.txt

参考サイト様
RGBとHSVの相互変換
HSV - HSVの各値からRGBを求める
RGBからHSVへの変換と復元

posted by むらせ at 2013年07月14日 22:07 | レイヤープラグイン/テクスチャ | このブログの読者になる | 更新情報をチェックする

レイヤーモードのちょっとした話

「結合したら色が変わる」とも同じ原因の話です。

テスト用画像です。レイヤーモードを作るとき、確認用はこんな風に適当に描画してます。
book01_005.png

上のレイヤーのレイヤーモードを「除外」にしたらこんな色に。
book01_006a.png

このレイヤー2つをフォルダに入れてみます。と・・・
book01_006b.png

book01_006c.png

これ、フォルダのレイヤーモードを「通過」にしてしまえば、白背景レイヤーを作らなくても大丈夫に見えますが、見えるだけです。
この手のレイヤーモードで結合したいときは、下のレイヤーが不透明度100%でなければいけません。
透明レイヤーと結合すれば、「 結合先(下のレイヤー)の情報がない → 変化しない」ということです。

posted by むらせ at 2014年12月11日 21:54 | レイヤープラグイン/テクスチャ | このブログの読者になる | 更新情報をチェックする

レイヤーブレンド【除外】

レイヤーブレンドモードの【除外】です。

smud_exlusion.zip ←ダウンロード

DLしてZIP解凍後、smud_exlusion.dll を pluginフォルダ内の blendフォルダに入れると使えるようになります。
000gwojwaa.png

以前見つけてた計算式の載ってるサイト
http://www.tagen.tohoku.ac.jp/labo/ishijima/Photoshop-01.html
http://dunnbypaul.net/blends/
http://stackoverflow.com/questions/5919663/how-does-photoshop-blend-two-images-together

上の日本語のサイトの計算式 
Overwrap = Bottom(下のすべての色)+ Top(除外を使いたいレイヤー) - 2 * Bottom * Top / 255 
で、あっさり成功しました。
psdファイルに保存するときのkeyは、コッペパンさんが調べてくれてたし。
Microsoft Visual C++ 2008 Express Edition を使えなくしちゃってて、なんとか使えるようにならないか格闘してる時間が一番長かったです。
まさか登録型のフリーソフトで、30日以内に登録しないと使えなくなるとは思わなかったですよorz
あ、結局2010版をインスコしました。
あまり変化なくて助かりました!

この「除外」のソースはtxtで公開しておきます。
カスタムしたいかたはご自由にどうぞです。
smud_exlusion.txt

posted by むらせ at 2014年12月11日 22:38 | レイヤープラグイン/テクスチャ | このブログの読者になる | 更新情報をチェックする