HSS Image Export Plug-in 仕様 Rev.1


 
目次
はじめに
Plug-in APIのバージョン
共通関数の説明
構造体の説明
エラーコード
仕様の変更



1.はじめに
この仕様書はSusie出力プラグインの仕様が確定するまでの暫定的なものである。
本仕様は現在(1999/1/10)のところPicture Effecter(渡辺 裕朗)でのみ有効な仕様書である。
HSS Image Export Plug-in は 32bit Windows の DLL であり、後述の API により簡単に使う事が出来る。
拡張子は、*.XPIとする。

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.

3.共通関数の説明
XpiGetPluginInfo() : Plug-inに関する情報を得る
Prototype
  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() : サブフォーマットの情報を得る
Prototype
  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() : サブフォーマットの情報を得る
Prototype
  extern "C" int _export PASCAL XpiIsSupported(LPXPISTRUCT pXPI);

Parameter
LPXPISTRUCT pXPI XPISTRUCT構造体のポインタ

Return
  対応している画像形式であれば1を返す。

解説
  基本的にはXpiGetSubFormatInfo()でinfono=XPI_OPT_DEPTHで対応画像深度を確認するが、念のために、実行前にこの関数で処理可能かどうか確認する。

 
XpiSavePicture() : 実際の保存処理を行う
Prototype
  extern "C" int _export PASCAL XpiSavePicture(LPXPISTRUCT pXPI);

Parameter
LPXPISTRUCT pXPI XPISTRUCT構造体のポインタ

Return
  エラーコード

4.構造体の説明
XPISTRUCT構造体: XpiIsSupported()、XpiSavePicture()で使用
注意:1バイトアラインメントの構造体
定義例

#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'で終了する文字列へのポインタ)

5.エラーコード
  共通エラーコード
定数名(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
(C)1998-2000,1999,2000 Hiroaki Watanabe
2000/2/12 更新