| 目次 | |
| 1 | はじめに |
| 2 | Plug-in APIのバージョン |
| 3 | 共通関数の説明 |
| 4 | 構造体の説明 |
| 5 | エラーコード |
| 6 | 仕様の変更 |
2.Plug-in APIのバージョン
今後の拡張性を持たせるため、Plug-inにAPIのバージョン番号がつく。
このバージョン番号はすべてのバージョンに共通である関数'XpiGetPluginInfo'によって取得出来る。
バージョン番号は基本的に4byteのコードで以下の意味を持つ。
H0 X N
~T T T
| | +-- N :
Normal, M : Multi-picture
| +---- I : Import
filter, X : Export filter, A : Archive extractor
+------ Virsion No.
| XpiGetPluginInfo() : Plug-inに関する情報を得る |
| extern "C" int _export PASCAL XpiGetPluginInfo(int nInfoNo, LPSTR pszBuf,int nBufLen); |
Parameter
| int nInfoNo | 取得する情報番号 | ||
| 0 | Plug-in APIバージョン | ||
| 1 | Plug-in名、バージョン及び copyright | ||
| 10n+2 | ファイル形式名 | ||
| 10n+3 | 代表的な拡張子'*.bmp;*.dib'など
複数ある場合は';'を区切り文字として使用する。 |
||
| 10n+4 | デフォルト拡張子
保存の際に拡張子を指定する場合。 'BMP'、'TIF'など |
||
| LPSTR pszBuf | 情報を納めるバッファ | ||
| int nBufLen | バッファ長(byte) 256byte以上を推奨 | ||
Return
| バッファに書き込んだ文字数を返す。
情報番号が無効の場合、0を返す。 |
解説
| 情報番号0と1はすべてのバージョンで共通とする。
一つのplug-inで複数のフォーマットに対応している場合はそれぞれ別にGetPluginInfoで情報を返して下さい。 |
| XpiGetSubFormatInfo() : サブフォーマットの情報を得る |
| extern "C" int _export PASCAL XpiGetSubFormatInfo(int nFmtNo, int nSubNo, int nInfoNo, LPSTR pszBuf, int BufLen); |
Parameter
| int nFmtNo | フォーマット番号 | |||
| int nSubNo | サブフォーマット番号 | |||
| int nInfoNo | 取得するオプション番号 | |||
| 定数名 | 数値 | 説明 | ||
| XPI_OPT_SUB_NAME | 0 | サブフォーマット名 | ||
| XPI_OPT_DEPTH | 1 | サポートする画像深度32文字の'0'か'1'を返す。最初の文字が1bit画像、順次2、3、4...bit画像をサポートしている事を表す。戻り値は常に32.
例) pszBuf=10010001000000000000000100000000 ->1、4、8、24bit画像をサポート |
||
| XPI_OPT_NUMIMG | 2 | 保存画像の最大枚数
'00XM'形式のプラグインの場合、1つのファイルに保存できる最大枚数を返す。 '00XN'形式のプラグインの場合常に'1'を返す。 元画像の枚数となる。 |
||
| XPI_OPT_RES | 3 | 画像解像度(dpi単位で指定)
"0" : 非サポート "1" : サポート |
||
| XPI_OPT_ASPECT | 4 | アスペクトレシオ
"0" : 非サポート "1" : サポート |
||
| XPI_OPT_COMPRATIO | 5 | 圧縮率(%)
"0" : 非サポート "1" : サポート |
||
| XPI_OPT_TRANSINDEX | 6 | パレットインデックス指定透過情報を含むかどうか
"0" : 非サポート "1" : サポート |
||
| XPI_OPT_TRANSCOLOR | 7 | 色指定透過情報を含むかどうか
"0" : 非サポート "1" : サポート |
||
| XPI_OPT_COMMENT | 8 | コメント
"0" : 非サポート "n" : 最大n文字 |
||
| LPSTR pszBuf | 情報を納めるバッファ | |||
| int nBufLen | バッファ長(byte) 256byte以上を推奨 | |||
Return
| バッファに書き込んだ文字数を返す。
情報番号が無効の場合、0を返す。 |
| XpiIsSupported() : サブフォーマットの情報を得る |
| extern "C" int _export PASCAL XpiIsSupported(LPXPISTRUCT pXPI); |
Parameter
| LPXPISTRUCT pXPI | XPISTRUCT構造体のポインタ |
Return
| 対応している画像形式であれば1を返す。 |
解説
| 基本的にはXpiGetSubFormatInfo()でinfono=XPI_OPT_DEPTHで対応画像深度を確認するが、念のために、実行前にこの関数で処理可能かどうか確認する。 |
| XpiSavePicture() : 実際の保存処理を行う |
| extern "C" int _export PASCAL XpiSavePicture(LPXPISTRUCT pXPI); |
Parameter
| LPXPISTRUCT pXPI | XPISTRUCT構造体のポインタ |
Return
| エラーコード |
| XPISTRUCT構造体: XpiIsSupported()、XpiSavePicture()で使用 |
#pragma pack(1) // VC++等の場合
typedef struct {
DWORD dwSizeStruct;
HWND hWnd;
LPCSTR pszName;
DWORD dwNumImg;
LPBITMAPINFO* lpzBI;
LPBYTE* lpzImg;
WORD wFmtNo;
WORD wSubNo;
FARPROC lpPrgressCallback;
long lData;
float fResolution;
float fAspectRatio;
float fQuality;
long lTransparent;
long lTransparentIndex;
RGBQUAD rgbTransparentColor;
LPTSTR pszComment;
} XPISTRUCT, *LPXPISTRUCT;
#pragma pack() // VC++等の場合
各変数の説明
| 定数名(XPI.hで定義) | 数値 | 説明 | |
| DWORD dwSizeStruct | 0 | この造体のサイズ(これでXPISTRUCT構造体のバージョンをチェック) | |
| HWND hWnd | 4 | このプラグインを呼び出したアプリケーションのウインドウハンドル
特別なメッセージを出力する際に使用する NULLが渡された場合、メッセージ出力は禁止 |
|
| LPCSTR pszName | 8 | 保存するファイル名のフルパス('\0'で終了する文字列へのポインタ) | |
| dwNumImg | 12 | 出力する画像数(lpzBI, lpzImgの配列数) | |
| lpzBI | 16 | 出力する画像のBITMAPINFO構造体のポインタ配列(dwNumImg分) | |
| lpzImg | 20 | 出力する画像の画像データのポインタ配列(dwNumImg分) | |
| wFmtNo | 24 | 出力する画像の画像フォーマット番号(0〜) | |
| wSubNo | 26 | 出力する画像の画像サブフォーマット番号(0〜) | |
| lpPrgressCallback | 28 | 途中経過を表示するコールバック関数へのポインタ。
MakeProcInstance を用いて求める。 NULLの場合、plug-inは処理が終了するまでプロセスを占有し、中断出来ない。 コールバック関数のprototype: int PASCAL ProgressCallback(int nNum,int nDenom,long lData); まず nNum==0 でコールされ、nNum==nDenom になるまで定期的に呼ばれる。 戻値が 非0 の時、Plug-inは処理を中断する。 NULLが渡される場合にも対処すること |
|
| lData | 32 | 状況表示用コールバック関数に渡されるデータ | |
| fResolution | 36 | 画像解像度(dpi単位で指定) | |
| fAspectRatio | 40 | アスペクト比
水平解像度と垂直解像度を別々に指定できる場合、以下の計算式で対応する 垂直解像度 = fResolution / fAspectRatio |
|
| fQuality | 44 | 圧縮率(%) | |
| lTransparent | 48 | 透過モード(0:なし、1:指定パレット、2:色指定) | |
| lTransparentIndex | 52 | 透過パレットインデックス | |
| rgbTransparentColor | 56 | 透過背景色 | |
| pszComment | 60 | コメント('\0'で終了する文字列へのポインタ) |
| 共通エラーコード | ||||
| 定数名(XPI.hで定義) | 数値 | 説明 | ||
| ERR_SPI_NoError | 0 | 正常終了 | ||
| ERR_SPI_NotImplement | -1 | その機能はインプリメントされていない | ||
| ERR_SPI_StopOperation | 1 | コールバック関数が非0を返したので展開を中止した | ||
| ERR_SPI_UnknownFormat | 2 | 未知のフォーマット | ||
| ERR_SPI_CrashData | 3 | データが壊れている | ||
| ERR_SPI_AllocMemory | 4 | メモリーが確保出来ない | ||
| ERR_SPI_OtherMemory | 5 | メモリーエラー(Lock出来ない、等) | ||
| ERR_SPI_FileRead | 6 | ファイルリードエラー | ||
| ERR_SPI_Reserve | 7 | (予約) | ||
| ERR_SPI_Inside | 8 | 内部エラー | ||
| 出力プラグイン独自コード | ||||
| 定数名(XPI.hで定義) | 数値 | 説明 | ||
| ERR_XPI_InputImageNum | 100 | 入力画像数が違う | ||
| ERR_XPI_OutpuImageNum | 101 | 出力画像数が違う | ||
| ERR_XPI_OptionParam | 102 | オプションパラメータがおかしい | ||
| ERR_XPI_InputImage | 103 | 入力画像がおかしい | ||
| ERR_XPI_Pointer | 104 | データポインタエラー | ||
| ERR_XPI_FileWrite_ | 105 | ファイルライトエラー | ||
| ERR_XPI_NotSupportColor | 106 | サポートされていない色数 | ||
6.仕様の変更
基本的に本プラグイン仕様書はSusieの出力プラグインの仕様が確定するまでの暫定バージョンである。
いつ、仕様が変更されるか保障できない。
| Goto HomePage |
|
2000/2/12 更新
|