αチャンネル付きPNGファイル読み込みDLL
ReadMe

このDLLでできること

 半透過情報を持つPNGファイルを読み込み、その情報を保持したまま、指定したビットマップに書き込みます。

特徴

仕様

 24bitRGBカラーのPNGファイルまたは32bitRGBAカラーのPNGファイルのみ読み込むことができます。少しソースに手を加えると、他形式にも対応できますが、個人的にはこれで十分であると判断したため、このような仕様になっています。要望があれば今後のバージョンで対応します。

使用方法

 PNGファイルを利用するまでの全体的な流れは以下の通りです。

CreatePNGLoader関数

GetPNGLoaderInfo関数

ビットマップを調整

GetImageDataToBitmap関数

DeletePNGLoader関数

描画など

関数リファレンス - C言語編

#define INTEXP extern "C" __declspec(dllimport) signed long __stdcall
INTEXP CreatePNGLoader(TPNGLoaderID* PPNGLoaderID, char* FileName);

PNGLoaderを初期化します。

第1引数

 TPNGLoaderID型の変数を作成して、そのポインタを渡してください。ここで初期化したPNGLoaderで他の関数を使用する場合は、ここで渡したTPNGLoaderIDを渡して下さい。

第2引数

 読み込むPNGファイルのファイル名

INTEXP GetPNGLoaderInfo(TPNGLoaderID PNGLoaderID, PNGLINFO* infop);

PNGファイルの画像情報(大きさ、色数等)を取得します。

第1引数

 CreatePNGLoaderで取得したPNGLoaderIDです。

第2引数

 画像情報を取得する構造体変数を作成して、そのポインタを渡して下さい。

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カラー*/
	
INTEXP GetImageDataToBitmap(TPNGLoaderID PNGLoaderID, HBITMAP hbmp);

指定したビットマップに画像データを書き込みます。

第1引数

 CreatePNGLoaderで取得したPNGLoaderIDです。

第2引数

 有効なビットマップハンドルを渡して下さい。ビットマップの大きさや画像フォーマットが読み込むPNGファイルと異なるとエラーを返します。(bmBitsPixel等を正しく設定して下さい。)ビットマップのフォーマットについてはMSDN等を参照して下さい。

INTEXP DeletePNGLoader(TPNGLoaderID* PPNGLoaderID);

ファイルをクローズし、メモリーを解放します。

第1引数

 CreatePNGLoaderで取得したPNGLoaderIDへのポインタです。

関数リファレンス - Delphi編

function CreatePNGLoader(PPNGLoaderID: PTPNGLoaderID; FileName: PChar): Integer; stdcall;

PNGLoaderを初期化します。

第1引数

 TPNGLoaderID型の変数を作成して、そのポインタを渡してください。ここで初期化したPNGLoaderで他の関数を使用する場合は、ここで渡したTPNGLoaderIDを渡して下さい。

第2引数

 読み込むPNGファイルのファイル名

function GetPNGLoaderInfo(PNGLoaderID: TPNGLoaderID; infop: PPNGLINFO): Integer; stdcall;

PNGファイルの画像情報(大きさ、色数等)を取得します。

第1引数

 CreatePNGLoaderで取得したPNGLoaderIDです。

第2引数

 画像情報を取得する構造体変数を作成して、そのポインタを渡して下さい。

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カラー
	
function GetImageDataToBitmap(PNGLoaderID: TPNGLoaderID; hbmp: HBITMAP): Integer; stdcall;

指定したビットマップに画像データを書き込みます。

第1引数

 CreatePNGLoaderで取得したPNGLoaderIDです。

第2引数

 有効なビットマップハンドルを渡して下さい。ビットマップの大きさや画像フォーマットが読み込む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);
	
function DeletePNGLoader(PNGLoaderID: PTPNGLoaderID): Integer; stdcall;

ファイルをクローズし、メモリーを解放します。

第1引数

 CreatePNGLoaderで取得したPNGLoaderIDへのポインタです。

推奨環境

 このDLLは、PNGファイルから取り出した画像データをビットマップに書き出しますが、Delphi上でbuin2gou氏のbuinGLに含まれるTABitmapの使用を想定して作られています。TABitmapを利用すると、簡単に他の画像等との半透過合成が行えるので非常に便利です。当然、PNGファイルに含まれていた半透過情報を維持したまま利用できます。

 また透過PNGファイルの作成には、フリーソフトのPixia + まっさ氏の「透過対応PNG保存プラグイン」を推奨します。

開発環境

Borland C++ Compiler 5.5.1 + BCC Developer

動作テストは、上記の推奨環境で行っています。

ライセンス

 商用、非商用に関わらず自由に使用して下さい。ただし、このライブラリが原因で、いかなる問題が発生したとしても、作者は責任を負えませんので、自己責任での使用をお願いします。

 使用連絡は必要ありませんが、どのようなソフトウェアに使われているのかを知りたいので、連絡して頂けると嬉しいです。(フリーウェアであれば、ダウンロードしに行きます。シェア、商用であれば…提供して頂けると嬉しいですね)また、ドキュメント等にこのライブラリを使用していることを一言書いて頂けると幸いです。

 必ずしも要望に応えられるわけではありませんが、要望、バグなどの連絡もお待ちしております。

サポート・開発

更新履歴