CLIP STDUIO PAINT EXのプラグイン開発に関する話です。
CLIP STUDIO PAINTでは「カラー」「グレー」「モノクロ」の3種類のレイヤー表現色を使うことができる。
サンプルではカラーのみに対応しているが、他のレイヤーモードにも対応するために必要な事柄を書く。
フィルタを実行できるレイヤーモードを設定
サンプルの初期化の部分のtarget[]の要素をを増やす。
この種類はドキュメント16p「ターゲットレイヤーの種類」に書いてある。
表現色と「ターゲットレイヤーの種類」は以下のように対応する。
カラー <-> kTriglavPlugInFilterTargetKindRasterLayerRGBAlpha
グレー <-> kTriglavPlugInFilterTargetKindRasterLayerGrayAlpha
モノクロ <-> kTriglavPlugInFilterTargetKindRasterLayerBinarizationGrayAlpha
コードは例えば以下のようになる。
TriglavPlugInInt target[]={kTriglavPlugInFilterTargetKindRasterLayerRGBAlpha,
kTriglavPlugInFilterTargetKindRasterLayerGrayAlpha,
kTriglavPlugInFilterTargetKindRasterLayerBinarizationGrayAlpha
};
TriglavPlugInFilterInitializeSetTargetKinds(pRecordSuite,hostObject,target,3);
レイヤーの表現色を判定
オフスクリーンサービスのgetChannelOrderProcを使って「チャンネルオーダー」を取得する。
TriglavPlugInInt order;
pOffscreenService->getChannelOrderProc(&order, sourceOffscreenObject);
得られる値はドキュメント16p「オフスクリーンのチャンネルオーダー」のいずれかである。
レイヤー表現色とチャンネルオーダーの対応は上記「表現色・チャンネルオーダー・色深度の関係まとめ」のようになる。
カラー <-> kTriglavPlugInOffscreenChannelOrderRGBAlpha (0x03)
グレー <-> kTriglavPlugInOffscreenChannelOrderGrayAlpha (0x02)
モノクロ <-> kTriglavPlugInOffscreenChannelOrderBinarizationGrayAlpha (0x06)
ドキュメントによるとチャンネルオーダーは全部で8種類があるようだが、他のモードが返ってくる場面があるのかは分からない。上記の3つに対応しておけばひとまず十分と思われる。
色深度の設定
ドキュメント13ページ「■フィルタの実装における注意点」にある1-5の流れを行う場合、ビットマップサービスのcreateProc()の第4引数に適切な色深度を設定する必要がある。
その場合は表現色に応じて以下のようにする。
カラー <-> 4
グレー <-> 2
モノクロ <-> 2
これより少なくすると動かなくなるが、多くした場合は動く(が、メモリを食うので推奨されないと思われる)。