＊imgctl.dllラッパーSAORI「imgctl_saori」
■これは何？
「伺か」用ゴーストのSAORIです。
ルーチェ氏作のimgctl.dllの機能を利用できます。


■注意
作者はすべての機能をチェックできていません。
不具合が有りましたら、報告お願いします。
ただ、報告をいただいたからといっても、すぐに修正できるとは限りません。


■使い方
例：
●Argument0
〜コマンド説明〜
・Argument[n]
〜Argument[n]に関する追加情報〜
...
＞Result
〜Resultに関する追加情報〜
*Value[n]
〜Value[n]に関する追加情報〜
...

// [基本関数]
●ImgctlVersion
imgctl.dllのバージョンを100倍したもの返します。
例えば、バージョンが「1.01」であるならば「101」という値が返ります。
＞バージョン番号

●ImgctlBeta
imgctl.dllのベータバージョンを返します。
「1.01B」ならば「1」、「1.01B2」ならば「2」が返ります。
ベータ版でない(正規版である)ならば「0」が返ります。
＞ベータバージョン番号

●ImgctlError
エラーが起きた直後に呼び出すと、エラーの原因を返します。
＞エラーメッセージ
imgctl.txt参照
*エラーコード
imgctl.h参照
*エラーメッセージ(Resultと同じ)

●ImgctlErrorClear
内部で保持しているエラーコードをクリアします。
「ImgctlError」を呼び出すと、「エラー無し」が返るようになります。

●GetImageType
画像ファイルの形式を返します。
・画像ファイルのパス
＞画像形式
"BITMAP","JPEG","PNG","GIF","TIFF","PIC","MAG","PCX","UNKNOWN"のどれか。
*画像形式(Resultと同じ)
*追加情報
"JPEG"→"Exif","JFIF"のどちらか。
"GIF"→"GIF87a", "GIF89"のどちらか。
"MAG"→MAKIフォーマットが"01A"か"01B"のどちらか。

●ToDIB
画像ファイルを開いて、DIBデータを作成し、そのハンドル(DIBハンドルとする)を返します。
DIBハンドルを得る他のコマンドにもいえることですが、
取得したハンドルは必ず「DeleteDIB」を呼び出して削除してください。
・画像ファイルのパス
＞DIBハンドル


// [DIBデータ処理関数]
●DeleteDIB
取得したDIBハンドルを削除します。
コマンドが失敗したとき、Internal Server Errorが返ります。
・DIBハンドル

●HeadDIB
DIBデータの各種情報を返します。
・DIBハンドル
＞Valueの情報を「,」でつなげたもの
*画像の幅
*画像の高さ
*1ピクセルあたりのビット数
*圧縮タイプ
"RGB":無圧縮
"RLE8":8bppランレングス圧縮
"RLE4":4bppランレングス圧縮
"BITFIELDS":無圧縮。ただしカラーマスクあり。
*データサイズ
ランレングス圧縮以外の時は0の場合あり。
*横の1メートルあたりのピクセル数
0の場合あり。
*縦の1メートルあたりのピクセル数
0の場合あり。
*パレット色数
8ビット以下の場合のみ。0なら最大数。

●PaletteDIB
DIBデータのからパレットデータ列を返します。
・DIBハンドル
・取得したいデータ数
＞取得したデータ数
*パレットデータ(1つ目)
*パレットデータ(2つ目)
...
0x00BBGGRRの形式の整数。
Resultで示される数だけ存在します。

●PixelDIB
DIBデータの指定点の色を返します。
・DIBハンドル
・X座標
・Y座標
座標の指定は左/上からですが、マイナス値にすると右/下からになります。
また、画像サイズより大きい値を指定すると、超えた分を再び左/上から数えなおします。
＞色
0x00BBGGRRの形式の整数。

●ColorDIB
DIBデータの使用色数を返します。
・DIBハンドル
＞色数

●CopyDIB
DIBデータをコピーして、新しくできたDIBデータのハンドルを返します。
・DIBハンドル
＞新しいデータのDIBハンドル

●CutDIB
DIBデータの一部を切り取って、新しくできたDIBデータのハンドルを返します。
・DIBハンドル
・X座標
・Y座標
座標の指定は左/上からですが、マイナス値にすると右/下からになります。
また、画像サイズより大きい値を指定すると、超えた分を再び左/上から数えなおします。
・幅
・高さ
マイナスの値を指定したときは左右/上下が反転します。
0を指定したときは右/下までが範囲になります。
＞新しいデータのDIBハンドル

●TurnDIB
DIBデータを90度単位で回転させます。
コマンドが失敗したとき、Internal Server Errorが返ります。
・DIBハンドル
・回転角
回転角は90度単位に丸められます。

●DIBto24Bit
DIBデータを24ビット化します。
コマンドが失敗したとき、Internal Server Errorが返ります。
・DIBハンドル

●DIBto16Bit
DIBデータを16ビット化(各色5ビット)します。
コマンドが失敗したとき、Internal Server Errorが返ります。
・DIBハンドル

●DIBto16BitEx
DIBデータを16ビット化(各色5ビット)します。
現在デフォルト設定に固定されているため、「DIBto16Bit」とおそらく変わりません。
コマンドが失敗したとき、Internal Server Errorが返ります。
・DIBハンドル

●DIBto8Bit
DIBデータを8ビット化します。
コマンドが失敗したとき、Internal Server Errorが返ります。
・DIBハンドル


// [24ビットDIBデータ処理関数]
●PasteDIB
DIBデータの一部または全部を、別のDIBデータの指定座標に貼り付けます。
貼り付ける際にはいくつかの貼り付け方法が選択できます。
コマンドが失敗したとき、Internal Server Errorが返ります。
・貼り付け先DIBハンドル
内部で24ビットのDIBデータに変換されます。
・貼り付け先X座標
・貼り付け先Y座標
マイナス値を指定すると、画像の左/上からその分だけ外れた位置が始点になります。
コピー元画像が入らない位置に始点設定すると、このコマンドは失敗します。
・幅
・高さ
マイナス値を設定すると、コピー元の画像がそれぞれ左右/上下反転します。
・コピー元DIBハンドル
・コピー元X座標
・コピー元Y座標
座標の指定は左/上からですが、マイナス値にすると右/下からになります。
また、画像サイズより大きい値を指定すると、超えた分を再び左/上から数えなおします。
・貼り付け方法
何も指定しないと、ただ単純に貼り付けます。
それ以外に次の方法が利用できます。
"alpha"
　アルファブレンドを行って、貼り付け先に半透明で貼り付けます。
　追加データに透明度を0〜100までの整数で指定してください。
"sprite"
　抜き色処理を行い、特定の色だけ貼り付けをしなくなります。
　追加データに色を0x00BBGGRR形式の整数で指定してください。
"frame"
　額縁状にアルファブレンドを行い、画像の外側ほど透明度が高く貼り付けられます。
　追加データに縁の幅を指定してください。
"pngalpha"
　「PNGAtoDIB」で取得出来るものと同様のアルファチャネルデータを用いて貼り付けます。
　要はシェルのpnaと同じ処理です。
　追加データにアルファチャネルデータのDIBハンドルを指定してください。
・追加データ
貼り付け方法に何か指定したときは、それぞれ適当な値を指定してください。

●ResizeDIB
DIBデータの幅と高さを伸縮します。
コマンドが失敗したとき、Internal Server Errorが返ります。
・DIBハンドル
内部で24ビットのDIBデータに変換されます。
・幅
・高さ
0を指定すると、元の幅/高さを維持します。
マイナス値を指定すると、元の画像のアスペクト比を保つように、
もう片方の値を基準にして自動で値が決められます。
両方マイナス値にすると、処理は行われません。

●TurnDIBex
DIBデータを任意角で回転させます。
コマンドが失敗したとき、Internal Server Errorが返ります。
・DIBハンドル
内部で24ビットのDIBデータに変換されます。
・回転角
実際に指定したい角度の1000倍の値を整数で指定してください。
・余白色
回転によって生じる余白を埋める色を指定してください。


// [RLE-DIBデータ処理関数]
●IsRLE
DIBデータがRLE-DIBであるかを判定します。
・DIBハンドル
＞真偽値
真なら1、偽なら0。

●DIBtoRLE
4/8ビットのDIBデータをRLE-DIB化します。
4/8ビットのDIBデータで無い場合、コマンドは失敗します。
コマンドが失敗したとき、Internal Server Errorが返ります。
・DIBハンドル

●RLEtoDIB
RLE-DIBを普通のDIBデータにします。
すでに普通のDIBだったときは何もしません。
コマンドが失敗したとき、Internal Server Errorが返ります。
・DIBハンドル


// [Bitmap画像処理関数]
●DIBtoBMP
DIBデータをBitmapファイルとして保存します。
コマンドが失敗したとき、Internal Server Errorが返ります。
・保存ファイルパス
・DIBハンドル

●BMPtoDIB
指定したファイルをBitmapファイルとして読み込みます。
・画像ファイルのパス
＞DIBハンドル


// [JPEG画像処理関数]
●DIBtoJPG
DIBデータをJPEGファイルとして保存します。
コマンドが失敗したとき、Internal Server Errorが返ります。
・保存ファイルパス
・DIBハンドル
・品質
1〜100の整数を指定。値が小さいほど高圧縮。

●JPGtoDIB
指定したファイルをJPEGファイルとして読み込みます。
・画像ファイルのパス
＞DIBハンドル


// [PNG画像処理関数]
●DIBtoPNG
DIBデータをPNGファイルとして保存します。
コマンドが失敗したとき、Internal Server Errorが返ります。
・保存ファイルパス
・DIBハンドル
・インターレス画像にするかどうかを表す真偽値
真なら1、偽なら0。

●PNGtoDIB
指定したファイルをPNGファイルとして読み込みます。
アルファチャネルは無視します。
・画像ファイルのパス
＞DIBハンドル

●PNGAtoDIB
指定したPNGファイルのアルファチャネルを読み込みます。
このコマンドで得たDIBデータは以下の特徴を持ちます。
  * 8ビットのグレースケールDIBである。
  * n番目のパレットの色はRGB(n,n,n)となる[n:0〜255]。
  * パレット番号が 0 に近いほど、透過率が高いことを示す。
  * 透過情報として使われるのはパレット番号であり、各々のパレットに
    設定される色は任意色で構わない(グレースケールでなくてもよい)。
このコマンドで得たDIBデータは、「PasteDIB」の"pngalpha"での貼り付けに利用できます。
・画像ファイルのパス
＞DIBハンドル
アルファチャネルが無い場合は0が返ります。


// [GIF画像処理関数]
●DIBtoGIF
DIBデータをGIFファイルとして保存します。
コマンドが失敗したとき、Internal Server Errorが返ります。
・保存ファイルパス
・DIBハンドル
・インターレス画像にするかどうかを表す真偽値
真なら1、偽なら0。

●DIBtoGIFAni
DIBデータをGIFアニメーションファイルとして保存します。
コマンドが失敗したとき、Internal Server Errorが返ります。
・保存ファイルパス
・アニメーション1枚目の画像のDIBハンドル
・アニメーション2枚目の画像のDIBハンドル
・アニメーション3枚目の画像のDIBハンドル
...
・各コマの表示時間
1/100秒単位(整数)で指定してください。

●GIFtoDIB
指定したファイルをGIFファイルとして読み込みます。
・画像ファイルのパス
＞DIBハンドル


// [フィルタ処理関数]
●GrayDIB
DIBデータを淡色化します。
コマンドが失敗したとき、Internal Server Errorが返ります。
・DIBハンドル
・淡色化の度合い
0〜255を整数で指定してください。
255でグレースケールになります。

●ReplaceDIB
DIBデータの各々の点のRGBの値を交換します。
例えば指定を("blue","blue","green")としたときは、
RGB(128,0,255) → RGB(255,255,0)となり
RGB(0,128,0) → RGB(0,0,128)となります。
コマンドが失敗したとき、Internal Server Errorが返ります。
・DIBハンドル
・赤と交換する色
・緑と交換する色
・青と交換する色
交換する色は"red","green","blue"のように文字列で指定してください。

●RepaintDIB
DIBデータの指定色の置換を行います。
コマンドが失敗したとき、Internal Server Errorが返ります。
・DIBハンドル
・置換元の色
・置換先の色
・置換元の色
・置換先の色
...
色は0x00BBGGRR形式の整数で指定してください。
同じ色を置換元に何度指定しても、先にある方のみ有効になります。

// [色変換テーブル関数]
●ToneDIB
DIBデータの各々の点のRGB各色の度合いを変更します。
コマンドが失敗したとき、Internal Server Errorが返ります。
・DIBハンドル
・赤に対する変化量
・緑に対する変化量
・青に対する変化量
各変化量は-255〜255の整数で指定してください。
マイナス値にするとその色味が弱く、プラス値だと強くなります。

●ShadeDIB
DIBデータの各々の点のRGB各色の倍率を変更します。
コマンドが失敗したとき、Internal Server Errorが返ります。
・DIBハンドル
・赤に対する倍率
・緑に対する倍率
・青に対する倍率
各倍率は実際に指定したい倍率の1000倍の値を指定してください。
例えば2.5倍なら2500、0.5倍なら500を指定してください。

●GammaDIB
DIBデータのRGB各値にそれぞれガンマ補正を施します。
一般的に言われるガンマ補正を行うには、各ガンマ値を同じ値にしてください。
コマンドが失敗したとき、Internal Server Errorが返ります。
・DIBハンドル
・赤に対するガンマ値
・緑に対するガンマ値
・青に対するガンマ値
各ガンマ値は実際に指定したいガンマ値の1000倍の値を指定してください。
例えば2.5なら2500、0.5なら500を指定してください。
0を指定すると1を指定したものと見なします。

●ContrastDIB
DIBデータのRGB各値のコントラストをそれぞれ調整します。
コマンドが失敗したとき、Internal Server Errorが返ります。
・DIBハンドル
・赤に対する変化量
・緑に対する変化量
・青に対する変化量
各変化量は-255〜255の整数で指定してください。
マイナス値にするとその色味が明暗がぼやけ、プラス値だと明暗がハッキリします。

// 追加コマンド
●DeleteAllDIB
過去に取得したすべてのDIBハンドルを削除します。
＞削除に失敗したDIBハンドルの個数
おそらく不要な情報です。


■ヒント
・「0x00BBGGRR形式の整数」の作り方
R、G、Bにそれぞれ0〜255の間の整数が入っているとすると、

R+G*256+B*256*256

で求めることが出来ます。


■謝辞
大変に便利な画像処理DLL「imgctl.dll」を、フリーウェアとして公開されている
ルーチェ氏に、深い感謝の意を表します。

また、伺的ソフトウェア相談室にて、デバッグしてくださる皆様方にも
同じく深い感謝の意を表します。


■ライセンス
「imgctl_saori.dll」について、はNYSL Version 0.9982に従います。
「imgctl.dll」については、オリジナルの「Readme.txt」を
「original」ディレクトリ以下に同梱しますので参照してください。

http://www.kmonos.net/nysl/
NYSL Version 0.9982
----------------------------------------
A. 本ソフトウェアは Everyone'sWare です。このソフトを手にした一人一人が、
   ご自分の作ったものを扱うのと同じように、自由に利用することが出来ます。

  A-1. フリーウェアです。作者からは使用料等を要求しません。
  A-2. 有料無料や媒体の如何を問わず、自由に転載・再配布できます。
  A-3. いかなる種類の 改変・他プログラムでの利用 を行っても構いません。
  A-4. 変更したものや部分的に使用したものは、あなたのものになります。
       公開する場合は、あなたの名前の下で行って下さい。

B. このソフトを利用することによって生じた損害等について、作者は
   責任を負わないものとします。各自の責任においてご利用下さい。

C. 著作者人格権は しらまた(whiteball) に帰属します。著作権は放棄します。

D. 以上の３項は、ソース・実行バイナリの双方に適用されます。


■動作確認環境
WinXP SP2/Visual C++ 2005 Express Edition
SSP2.00.22+aya5で動作確認。


■連絡先
作者名・しらたま
サイト・JUNK ROOM
http://white-ball.hp.infoseek.co.jp/
メールアドレス
white_ball_11　hotmail.com
はてなダイアリー
http://d.hatena.ne.jp/white-ball/


■履歴
08/03/20	RepaintDIBを実行すると強制終了する不具合を修正。
08/03/16	リクエスト解析を修正。
08/03/15	HeadDIBでエラーが出る不具合を修正。
			DeleteDIBをしなくても、unload時にすべてのDIBを削除するようにした。
			DeleteAllDIBコマンドを追加。
			最適化を無効にした。
			PasteDIBで貼り付け方法が指定できない問題を修正。
08/03/10	公開
