VC++でGDI+ そにょ3 〜画像の読み込み1〜
自分が使わなかった部分は知識で書いて、実際に試してないから動くかわかんね。
ImageクラスとBitmapクラス
画像はImageクラスで扱う。BitmapクラスはImageクラスを継承している。そのため引数がImageクラスのインスタンスやその参照になっているメソッドにBitmapクラスのインスタンスやその参照を渡してもよい*1。BitmapクラスはGDIのHBITMAPに対応している。Bitmapクラスはピクセル単位での操作が可能である。
フォルダから読み込む
Imageオブジェクトの作成はコンストラクタ、またはFromFileメソッドを用いる。BMP、GIF、JPEG、PNG、TIFF、EMFを読み込むことができる。
Image(const WCHAR *filename, BOOL useEmbeddedColorManagement); static Image *FromFile(const WCHAR *filename, BOOL useEmbeddedColorManagement); Image myImage1(L"hoge.bmp"); Image* myImage2 = new Image(L"fuga.png"); Image* myImage3 = Image::FromFile(L"foo.jpg")
Bitmapオブジェクトとして読み込むときも同様。
Bitmap myBitmap1(L"hoge.gif"); Bitmap* myBitmap2 = new Bitmap(L"fuga.emf"); Bitmap* myBitmap3 = Bitmap::FromFile(L"foo.tif");
リソースからBitmapを読み込む
FromResourceメソッドを用いる。
static Bitmap *FromResource(HINSTANCE hInstance, const WCHAR *bitmapName);
hInstanceはGetModuleHandle(NULL)でHMODULEを取得、bitmapNameはMAKEINTRESOURCE()にリソースID、例えばIDB_BITMAP1を渡して取得。
LPCTSTR pResourceName = MAKEINTRESOURCE(IDB_BITMAP1); HMODULE hInstance = GetModuleHandle(NULL); pBitmap = Bitmap::FromResource(hInstance, (const WCHAR *)pResourceName);
Unicode環境であれば(const WCHAR *)のキャストは不要なはず。
*1:BitmapからImageを作れないか必死に悩んだのは今でも良い思い出。いや、悪い思い出か。