GDI+を用いての描画

解決


gak  2005-07-15 01:41:32  No: 58291

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-15 01:59:48  No: 58292

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

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


gak  2005-07-15 18:21:56  No: 58293

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

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

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

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


dairygoods  2005-07-15 18:41:02  No: 58294

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

なるほど。

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


gak  2005-07-15 19:37:34  No: 58295

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加