4

GDI ではダブル バッファリングを実現できましたが、GDI+ では実現できませんでした。ちらつきなしでpng画像を表示したいと思います。さらに、ある時点で、GDI+ を使用して png 画像でアニメーションを実現したいので、GDI+ でダブル バッファリングする方法を知ることが不可欠です。

ISTREAM を介して png 画像を Image オブジェクトに取得することができました: これは、問題が発生している場所を理解するのに役立つコードの一部です。

memmove(pBlock,pImage, size);
CreateStreamOnHGlobal(hBlock, FALSE, &pStream);
Graphics graphics(memDC);
Image image(pStream);
int image_width;
int image_height;
image_width= image.GetWidth();
image_height=image.GetHeight();
graphics.DrawImage(&image, posX,posY, image_width, image_height);
BitBlt(hdc, 0, 0, image_width, image_height, memDC, 0, 0, SRCCOPY);

注: png 画像を画面 DC (hdc) に直接描画すると、正常にレンダリングされます。ただし、最初に memDC に画像を描画してから、その memDC を screenDC に描画しようとすると、画像が表示されません!

誰かがGDI plusでダブルバッファする方法について正しい方向に向けてくれますか? ありがとうございました

4

1 に答える 1

2

I think your problem might be in how you're creating your memDC - are you using CreateCompatibleDC() to create that to make sure it's the compatible with the hdc that you're doing the BitBlt() into?

I've answered a question similar to this before about double buffering before and you might find that answer helpful :

GDI Acceleration In Windows 7 / Drawing To Memory Bitmap

There's code there that I've used quite a lot to double buffer with GDI, but draw to the memory bitmap using either GDI or GDI+. I've found it really useful being able to use GDI as it is significantly quicker for some operations (especially bitmap related functions) than GDI+, but GDI+ does some things much more easily so it gives the best of both worlds.

于 2013-03-12T08:10:45.810 に答える