半透過情報を持つPNGファイルを読み込み、その情報を保持したまま、指定したビットマップに書き込みます。
24bitRGBカラーのPNGファイルまたは32bitRGBAカラーのPNGファイルのみ読み込むことができます。少しソースに手を加えると、他形式にも対応できますが、個人的にはこれで十分であると判断したため、このような仕様になっています。要望があれば今後のバージョンで対応します。
PNGファイルを利用するまでの全体的な流れは以下の通りです。
PNGLoaderを初期化します。
TPNGLoaderID型の変数を作成して、そのポインタを渡してください。ここで初期化したPNGLoaderで他の関数を使用する場合は、ここで渡したTPNGLoaderIDを渡して下さい。
読み込むPNGファイルのファイル名
PNGファイルの画像情報(大きさ、色数等)を取得します。
CreatePNGLoaderで取得したPNGLoaderIDです。
画像情報を取得する構造体変数を作成して、そのポインタを渡して下さい。
typedef struct
{
signed long width; /*幅*/
signed long height; /*高さ*/
signed long bit_depth; /*色の1成分を表現するのに必要なビット数*/
unsigned long color_type; /*カラーフォーマット*/
} PNGLINFO;
カラーフォーマットは以下の通りです。
#define PNGL_CT_UNKNOWN 0x00 #define PNGL_CT_RGBA32 0x81 /*32ビットRGBAカラー(アルファチャンネルあり)*/ #define PNGL_CT_RGB24 0x01 /*24ビットRGBカラー*/
指定したビットマップに画像データを書き込みます。
CreatePNGLoaderで取得したPNGLoaderIDです。
有効なビットマップハンドルを渡して下さい。ビットマップの大きさや画像フォーマットが読み込むPNGファイルと異なるとエラーを返します。(bmBitsPixel等を正しく設定して下さい。)ビットマップのフォーマットについてはMSDN等を参照して下さい。
ファイルをクローズし、メモリーを解放します。
CreatePNGLoaderで取得したPNGLoaderIDへのポインタです。
PNGLoaderを初期化します。
TPNGLoaderID型の変数を作成して、そのポインタを渡してください。ここで初期化したPNGLoaderで他の関数を使用する場合は、ここで渡したTPNGLoaderIDを渡して下さい。
読み込むPNGファイルのファイル名
PNGファイルの画像情報(大きさ、色数等)を取得します。
CreatePNGLoaderで取得したPNGLoaderIDです。
画像情報を取得する構造体変数を作成して、そのポインタを渡して下さい。
type PNGLINFO = record; width: Integer; //幅 height: Integer; //高さ bit_depth: Integer; //色の1成分を表現するのに必要なビット数 color_type: Cardinal; //カラーフォーマット end;
カラーフォーマットは以下の通りです。
const PNGL_CT_UNKNOWN: Cardinal = $00; const PNGL_CT_RGBA32: Cardinal = $81; //32ビットRGBAカラー(アルファチャンネルあり) const PNGL_CT_RGB24: Cardinal = $01; //24ビットRGBカラー
指定したビットマップに画像データを書き込みます。
CreatePNGLoaderで取得したPNGLoaderIDです。
有効なビットマップハンドルを渡して下さい。ビットマップの大きさや画像フォーマットが読み込むPNGファイルと異なるとエラーを返します。(bmBitsPixel等を正しく設定して下さい。)ビットマップのフォーマットについてはMSDN等を参照して下さい。
//TBitmapのインスタンスを作成 img := TBitmap.Create; //カラーフォーマットの設定 img.PixelFormat = pf24bit; //24bitに設定 //img.PixelFormat = pf32bit; //32bitに設定 //サイズを調整する img.Width = pnglinfo.width; img.Height = pnglinfo.Height; //画像取得 GetImageDataToBitmap(pnglid, img.Handle);
ファイルをクローズし、メモリーを解放します。
CreatePNGLoaderで取得したPNGLoaderIDへのポインタです。
このDLLは、PNGファイルから取り出した画像データをビットマップに書き出しますが、Delphi上でbuin2gou氏のbuinGLに含まれるTABitmapの使用を想定して作られています。TABitmapを利用すると、簡単に他の画像等との半透過合成が行えるので非常に便利です。当然、PNGファイルに含まれていた半透過情報を維持したまま利用できます。
また透過PNGファイルの作成には、フリーソフトのPixia + まっさ氏の「透過対応PNG保存プラグイン」を推奨します。
Borland C++ Compiler 5.5.1 + BCC Developer
動作テストは、上記の推奨環境で行っています。
商用、非商用に関わらず自由に使用して下さい。ただし、このライブラリが原因で、いかなる問題が発生したとしても、作者は責任を負えませんので、自己責任での使用をお願いします。
使用連絡は必要ありませんが、どのようなソフトウェアに使われているのかを知りたいので、連絡して頂けると嬉しいです。(フリーウェアであれば、ダウンロードしに行きます。シェア、商用であれば…提供して頂けると嬉しいですね)また、ドキュメント等にこのライブラリを使用していることを一言書いて頂けると幸いです。
必ずしも要望に応えられるわけではありませんが、要望、バグなどの連絡もお待ちしております。