2009-07-23 9 views
2

ビットマップのような構造体をHDCに変換するには?gdi +ビットマップのような構造体をHDCに変換する方法は?

私は現在、画像処理プログラムをC++、gdiで書いています。

私はHDCを取得した場合。 gdiのHDCで好きなものを次のコードで描画できます。

// HDC is handy. 
HDC dc; 
dc.DrawXXX  // I can draw using gdi method. 
Graphics gr(dc); // now I can also draw on the dc using gdi+ method. 

私のアプリケーションはFreeImageに基づいています。 私はfipイメージを作っています。ビットマップのようにデータ構造体を使用する

しかし、私がfipWinImageを描画したい場合は、ビットマップをfipWinImagetoにコピーしてから、ビットマップを描画し、最後にビットマップをfsImageに変換し直す必要があります。 。

ビットマップにfipImageを変換する - >ビットマップに描画 - >私はfipImageから直接HDCを構築したいfipWinImage

fipWinImage imagefip; 
Bitmap* tempImg = new Bitmap(imagefip->GetWidth(), imagefip.GetHeigt(), PixelFormat24bppRGB); // memory comsuming is image is large 
Graphics *pGr = Graphics::FromImage(tempImg); 

HDC dc = pGr->GetHDC(); 

RECT rec; 
rec.left = 0; 
rec.top = 0; 
rec.right = imagefip.GetWidth(); 
rec.bottom = imagefip.GetHeight(); 
fipImage.draw(dc, rec); // using stretchdibits() 
pGr->ReleaseHDC(dc); 

Graphics gr(tempImg); 
HDC dc = gr.GetHDC();   // Get an Hdc, draw using gdi method 
gr.ReleaseHDC(tempDC);  // 
gr.drawXXX       // Draw using gdi+ method. 


fipWinImage fipImg;    // final result fipWinImage. 
HBITMAP temp; 
Color color; 
tempImg->GetHBITMAP(color, &temp); 
fipImg->copyFromBitmap(temp); 

にビットマップを変換します。 fipWinImageに直接描画する どうすればいいですか?

答えて

0

私はFreeImageを知りませんが、実際のピクセルデータ(DIBセクション)へのポインタを得ることができれば、毎回データをコピーすることなく共有するHBITMAPを作成できます。

2

まず、いくつかの明確化:

デバイスコンテキストは、基本的には前景色と背景色、ブラシ、フォント情報、および物理的な描画面(ビットマップ)のようなものを覚えている構造です。

これは便利なことですので、後でグラフィック操作を行うときにこれらのすべてを指定し続ける必要はありません。また、これらの設定をすべてこのように簡単に渡すこともできます。これは、DCが本当にあることです - ドローイングするサーフェイスを含む描画パラメータのコレクション。

「HDC」は、これらの構造体の1つに対するハンドル(参照)です。 「ハンドル」を使うと、ウィンドウがメモリ内の構造体を移動させ、ポインタが邪魔にならずに空き領域を管理できるようになります。

使用しているライブラリのソースコードにアクセスできる場合は、fipWinImage :: draw(...)メソッドを調べます。彼らがStretchDIBitsを使用している場合は、生のビットマップデータをある時点で互換性のあるフォーマットにする必要があります。これは、ビットマップがデバイスコンテキストに「選択」されています...

など、fipWinImageクラスは、基礎となるビットマップまたはDIBをラップしていることも

独自のHDCを取得する最後のステップも可能だし、できるだけで一度に1つのDCに選択することができます。 fipWinImageから内部HBITMAPを取得できる場合は、別のDCに選択することができます(まだ別のHCに選択されていないと仮定します)。

DCを作成すると、Windowsは自動的に1x1ビットマップを作成します(DCは常に選択されたビットマップを持つ必要があるため)。新しいビットマップを選択すると、以前に選択されたビットマップのハンドルが返されます。あなたが終わったときにそれを戻す必要があるので、それを掛けてください。

希望に役立ちます。

関連する問題