GDI+を用いての描画

解決


gak  2005-07-14 16:41:32  No: 58291  IP: 192.*.*.*

GDI+を用いて画像の描画を行いたいと思っています。

  //  HDC hdc;
  Gdiplus::Graphics grp(hdc);
  Gdiplus::Image    img(L"c:\\01.wmf");
  grp.DrawImage(&img, 0, 0);

例えば上記のような処理で描画できるますが、この場合だと
ファイルパスが必要になると思います。

このファイルパスでは無く、ファイルのバイナリデータや
HMETAFILE、HENHMETAFILE(メタファイルハンドル)から
GDI+を用いて描画する方法を教えて頂けないでしょうか。

よろしくお願いします。

WinXP VC++6.0 SP6 MFC

編集 削除
dairygoods  2005-07-14 16:59:48  No: 58292  IP: 192.*.*.*

バイナリデータとは、ビットマップのことでしょうか?
でしたら、ImageのサブクラスであるBitmapを使います。

メタファイルハンドルに対しては、Metafileを使います。

編集 削除
gak  2005-07-15 09:21:56  No: 58293  IP: 192.*.*.*

> バイナリデータとは、ビットマップのことでしょうか?
BMP,JPEG,PNG等と問わず、ファイルからそのまま読み込んだ時点のデータを意図していました。
例えば一般的なBMPファイルなら
  BITMAPFILEHEADER + BITMAPINFO + ビットマップのビット配列
という感じのものです。

Image クラスにファイル名を渡せばOKならば、上記のバイナリデータの場合も
何か手段が提供されていないか、と思い質問させて頂きました。

> メタファイルハンドルに対しては、Metafileを使います。
そのものなクラスがあったのですね。

今回頂いた情報から作業の足掛かりを得る事ができましたので解決チェックを付けておきます。
dairygoodsさん、ありがとうございました。

編集 削除
dairygoods  2005-07-15 09:41:02  No: 58294  IP: 192.*.*.*

> BMP,JPEG,PNG等と問わず、ファイルからそのまま読み込んだ時点のデータを意図していました。

なるほど。

Image クラスには IStream* を受け取るコンストラクタがあります。これが、ファイルに限らず、あらゆるデータ列に対応しています。
メモリデータから IStream オブジェクトを作るには、CreateStreamOnHGlobal を使うのが簡単でしょう。

編集 削除
gak  2005-07-15 10:37:34  No: 58295  IP: 192.*.*.*

> メモリデータから IStream オブジェクトを作るには、CreateStreamOnHGlobal を使うのが簡単でしょう。
これで今回私が実現したかった事が全てできそうです。
dairygoodsさん本当にありがとうございました。

編集 削除