読み取るだけであれば、GDI+ の力を借りれば良い。
しかし、PNG形式ファイルを読み取り、その後どう取り扱っていくか?
ゲーム用のDXライブラリであれば、LoadGraph()関数でいいのだが、普通にC++で扱っていこうと思うとビットマップ HBITMAP になるのだろうか。
DIB形式の独自クラスを作り、GetDIBitmap()関数と連動させていくなら、24ビットのデータ配列になる。
そうなったら、不透明度 alpha (0~255)をどう保持して管理するか。
DIBクラスを独自に作成し、そこから派生したクラス CDibArgb クラスを作る。
縦X横のサイズだけ BYTE 配列を用意し、そこに不透明度を入れておく。
単純な考えだ。
HBITMAP LoadPNG(LPCTSTR lpszPathFilename)
{
// (1). 画像読み込み //
Gdiplus::Bitmap* pImage = new Gdiplus::Bitmap(lpszPathFilename) ;
// (2). 画像の縦幅と横幅を取得 //
CSize sizeBitmap( (int)pImage->GetWidth() , (int)pImage->GetHeight() ) ;
// 画像 GDI+ (Image) から HBITMAP に変換 //// (プログラマー自身でメモリ解放する必要がある) //
HBITMAP hBitmap = ※ファイルからHBITMAP作成する関数
// メモリ破棄 //
delete pImage ;
return hBitmap ;
}
流れはこんな感じなのだが、さて、ファイルからHBITMAPを作成する関数と、不透明度を保持するのと、そこを設計していく必要がある。
たいしたことはないけれど。
C++で制作したフリーソフトの制作日記と、子どもの様子を、綴っていきます。
*************************************************************
Windows用フリーソフト(無料)総合サイト
http://yoyontek-develop.minim.ne.jp/
-------------------------------------------------------------
(1) 【 背景透過&境界線お掃除 】
http://yoyontek-develop.minim.ne.jp/clean-pic-fringe/
画像ファイルの背景を透過させ、境界線の汚れを除去(PNG対応)
-------------------------------------------------------------
(2) 【 休憩タイムアラート for KIDS 】
http://yoyontek-develop.minim.ne.jp/alert-kids/
子供のゲーム中に休憩時間をお知らせ
*************************************************************
