読み取るだけであれば、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/
子供のゲーム中に休憩時間をお知らせ
*************************************************************