Nanashi-soft○プログラマ専用○Photoshopプラグイン開発○
◇Photoshopプラグイン開発 -サンプル解析-
プラグインで一番骨が折れるのが,独自仕様のオンパレードな点です
サンプルを書き換えて作る。というのがセオリーです
今作りたいのは,フィルターで実行すると,RGB値が 16bitカラーになる機能です
なので,フィルターのサンプルをゴニョゴニョすれば良いと思われます
●目的の機能と似たサンプルを探す
filterフォルダの下にあるプロジェクトを見て,分かりやすそうなのを探してみる
dissolveがそれっぽいので,ビルドしてみる
・『エラー 1 error RC1015: cannot open include file 'afxres.h'. C:\aa\adobe_photoshop_cs5_sdk_win\pluginsdk\samplecode\filter\dissolve\win\Dissolve.rc 10 1 Dissolve』
文字通り afxres.hが開けないエラーだが,そのようなファイルは SDK内には存在しない
なので,作成して置いてやる
○afxres.hファイル
#ifndef _AFXRES_H
#define _AFXRES_H
#ifdef __cplusplus
extern "C" {
#endif
#include <windows.h>
#define IDC_STATIC (-1)
#ifdef __cplusplus
}
#endif
#endif
【注意】パソコン内にあった gccに付属の afxres.hから想像して作成したもので,あくまでコンパイルを通す為だけのものです
これを commonフォルダに突っ込んで,再度ビルドします
正常にビルドが完了すると,以下の場所に生成されました
adobe_photoshop_cs5_sdk_win/pluginsdk/samplecode/Output/Win/Release64/Dissolve.8bf
これを,前回と同様にフォトショのプラグインフォルダに放り込みます
適当に新規作成して,メニューのフィルター→AdobeSDK→Dissolve...
Amount%が全体のどのぐらいの割合に点を描くかを指定
100%として,OKボタンを押すと塗りつぶしになります
つまり,このプラグインを解析すれば,描画する事が可能だということです
●解析する
commonフォルダ内にある .cppファイルは3つです
Dissolve.cpp
DissolveRegistry.cpp
DissolveScripting.cpp
中身をザッと見たところ,Dissolve.cppの DissolveRectangle関数で塗っている事は容易に想像できます
leaveItAloneとdissolveに関するif文を削除すると,常に塗りつぶしになると思うので,やってみる
→確かにそうなった
InitDataの最初で,背景色,青,赤,緑のラジオボタン選択時カラーを代入している様子
だとすると,パレットは 0~255形式で指定と思われる
それを直接代入している DissolveRectangle関数中の……
if (depth == 32)
*fPixel = fColor;
else if (depth == 16)
*bigPixel = bigColor;
else {
*pixel = color; //←こいつが背景レイヤーと予想
}
後ろ 3bitをカットすれば,目的の 16bit化減色になる(はず)
if (depth == 32)
*fPixel = fColor;
else if (depth == 16)
*bigPixel = bigColor;
else {
// *pixel = color;
*pixel = *pixel & 0xf8;
}
これを実行してみると,ちゃんと 16bit画像が生成されました
ただし,画像は背景レイヤーでなければなりません(そこしか触っていない為)
○TOP○プログラマ専用○Photoshopプラグイン開発○