2009-06-07 40 views
1

DrawImageメソッドを使用してグラフィックスオブジェクトにビットマップイメージを描画していますが、イメージが多数あり、描画に時間がかかりすぎます。このフォーラムでは、StretchDIBitsを使用するとDrawingの時間が短縮されることを読んでいます。 Drawimageを呼び出してイメージを拡大縮小していますが、他の効率的な方法が必要です。 私はビットマップのベクトルを持っています* &私はグラフィックス上で各ビットマップを描きたいと思います。GDI +グラフィックスオブジェクトの描画スケーリング用のStretchDIBitsを使用したビットマップ

HDC orghDC = graphics.GetHDC(); 
CDC *dc = CDC::FromHandle(orghDC); 

m_vImgFramesはBitmap*をcontaing画像ベクトルです。私はBitmap*からHBITMAPを取った。私は最終的にグラフィックにorghDC &に描きたいこのHBITMAPを使用

HBITMAP hBitmap; 
m_vImgFrames[0]->GetHBITMAP(Color(255,0,0),&hBitmap); 

。ですから、StretchDIBitsを使ってBitmapをスケーリングし、最後にGraphicsオブジェクトを描画する方法を知りたいと思います。

私が代わりにStretchDIBitsを使用しての

答えて

1

参考にすることができ、なぜビットマップを拡大縮小するために直接GDI + APIを使用していない?:

CRect rc(0, 0, 20, 30); 

graphics.DrawImage((Image*)m_vImgFrames[0], 
    rc.left, rc.top, rc.Width(), rc.Height()); 
+0

返信いただきありがとうございます。私はすでにDrawImageを使用してみましたが、非常に遅いです。私はStretchDIBitsを使用する方法を見つけました。 – VideoDev

+0

私はあなたの質問にコメントするつもりだったが、VideoDevはそれに私を打ち負かす。 DrawImageは非常に遅いので使いたくありません。 –

0

StretchDIBitsを使用するには、このforum.Anyアイデアやコードに新しいですGdiplus::Bitmapで次の操作を行うことができます:

// get HBITMAP 
HBITMAP hBitmap; 
m_vImgFrames[0]->GetHBITMAP(Gdiplus::Color(), &hBitmap); 
// get bits and additional info 
BITMAP bmp = {}; 
::GetObject(hBitmap, sizeof(bmp), &bmp); 
// prepare BITMAPINFO 
BITMAPINFO bminfo = {}; 
bminfo.bmiHeader.biSize = sizeof(BITMAPINFO); 
bminfo.bmiHeader.biWidth = bmp.bmWidth; 
bminfo.bmiHeader.biHeight = bmp.bmHeight; 
bminfo.bmiHeader.biBitCount = bmp.bmBitsPixel; 
bminfo.bmiHeader.biCompression = BI_RGB; 
bminfo.bmiHeader.biPlanes = bmp.bmPlanes; 
bminfo.bmiHeader.biSizeImage = bmp.bmWidthBytes*bmp.bmHeight*4; // 4 stands for 32bpp 
// select stretch mode 
::SetStretchBltMode(HALFTONE); 
// draw 
::StretchDIBits(hDC, 0, 0, new_cx, new_cy, 0, 0, 
    m_vImgFrames[0]->GetWidth(), m_vImgFrames[0]->GetHeight(), 
    bmp.bmBits, &bminfo, DIB_RGB_COLORS, SRCCOPY); 

しかし、これは簡単なGraphics::DrawImageよりも、私のマシン上ではるかに高速に見えるしません。 。

関連する問題