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
バイナリデータとは、ビットマップのことでしょうか?
でしたら、ImageのサブクラスであるBitmapを使います。
メタファイルハンドルに対しては、Metafileを使います。
> バイナリデータとは、ビットマップのことでしょうか?
BMP,JPEG,PNG等と問わず、ファイルからそのまま読み込んだ時点のデータを意図していました。
例えば一般的なBMPファイルなら
BITMAPFILEHEADER + BITMAPINFO + ビットマップのビット配列
という感じのものです。
Image クラスにファイル名を渡せばOKならば、上記のバイナリデータの場合も
何か手段が提供されていないか、と思い質問させて頂きました。
> メタファイルハンドルに対しては、Metafileを使います。
そのものなクラスがあったのですね。
今回頂いた情報から作業の足掛かりを得る事ができましたので解決チェックを付けておきます。
dairygoodsさん、ありがとうございました。
> BMP,JPEG,PNG等と問わず、ファイルからそのまま読み込んだ時点のデータを意図していました。
なるほど。
Image クラスには IStream* を受け取るコンストラクタがあります。これが、ファイルに限らず、あらゆるデータ列に対応しています。
メモリデータから IStream オブジェクトを作るには、CreateStreamOnHGlobal を使うのが簡単でしょう。
> メモリデータから IStream オブジェクトを作るには、CreateStreamOnHGlobal を使うのが簡単でしょう。
これで今回私が実現したかった事が全てできそうです。
dairygoodsさん本当にありがとうございました。
ツイート | ![]() |