投稿

4月, 2018の投稿を表示しています

リソースのPNG画像を使う方法

透過PNG画像をダイアログ上のコントロールとして表示する必要が出来たので、リソースからPNG画像を読み込み Gdiplus::Bitmap で取得するコードを書きました。 ついでにビットマップ(BMP)画像も Gdiplus で扱いやすいように Bitmap で取得するようにと思ったのですが、何故か同じ方法ではうまく行かず。 Gdiplus::Bitmap にはリソースから Bitmap を作成するメソッドが用意されているのでそれを使うようにしました。 (ただインスタンスも指定しなければビットマップを作れないので別段これに実装する必要は無かったかも・・・) 手順としては以下のようになります。 1.FindResource()でリソースを探します。 2.SizeofResource()でリソースのサイズを取得。 3.LoadResource()でリソースを読み込んで LockResource() でメモリーをロックします。  (LoadResource()はHGLOBALを返しますが実際はグローバルメモリーに読み込まないため、LockResource()でポインターを取得します。) 4.グローバルメモリーを作り、3で取得したリソースデータをコピーします。 5.4のグローバルメモリーからIStreamポインターを作成します 6.5の IStream から Gdiplus::Bitmap を作成します。 途中で失敗した場合は例外を投げて処理を中断します。 実際にコードにするとこんな感じです。 Gdiplus::Bitmap* LoadImageFromResource(UINT nID, LPCTSTR pResourceType = RT_BITMAP, HMODULE hInstance = NULL) { HGLOBAL hRcBuf = NULL; void* pRcBuf = NULL; IStream* pIStream = NULL; Gdiplus::Bitmap *pBitmap = NULL; try { LPCTSTR pName = MAKEINTRESOURCE(nID); if (pResourceType == RT_BITMAP) {

リソースのPNG画像を使う方法

透過PNG画像をダイアログ上のコントロールとして表示する必要が出来たので、リソースからPNG画像を読み込み Gdiplus::Bitmap で取得するコードを書きました。 ついでにビットマップ(BMP)画像も Gdiplus で扱いやすいように Bitmap で取得するようにと思ったのですが、何故か同じ方法ではうまく行かず。 Gdiplus::Bitmap にはリソースから Bitmap を作成するメソッドが用意されているのでそれを使うようにしました。 (ただインスタンスも指定しなければビットマップを作れないので別段これに実装する必要は無かったかも・・・) 手順としては以下のようになります。 1.FindResource()でリソースを探します。 2.SizeofResource()でリソースのサイズを取得。 3.LoadResource()でリソースを読み込んで LockResource() でメモリーをロックします。  (LoadResource()はHGLOBALを返しますが実際はグローバルメモリーに読み込まないため、LockResource()でポインターを取得します。) 4.グローバルメモリーを作り、3で取得したリソースデータをコピーします。 5.4のグローバルメモリーからIStreamポインターを作成します 6.5の IStream から Gdiplus::Bitmap を作成します。 途中で失敗した場合は例外を投げて処理を中断します。 実際にコードにするとこんな感じです。 Gdiplus::Bitmap* LoadImageFromResource(UINT nID, LPCTSTR pResourceType = RT_BITMAP, HMODULE hInstance = NULL) { HGLOBAL hRcBuf = NULL; void* pRcBuf = NULL; IStream* pIStream = NULL; Gdiplus::Bitmap *pBitmap = NULL; try { LPCTSTR pName = MAKEINTRESOURCE(nID); if (pResourceType == RT_BITMAP) {

このブログの人気の投稿

リソースのPNG画像を使う方法

Django Webアプリ を AWS Elastic Beanstalk にデプロイする際にDBを初期化する