2013-03-10 116 views
4

我設法實現GDI的雙緩衝,但不是與GDI +。我想顯示一個沒有閃爍的PNG圖像。此外,在某些時候,我還希望使用GDI +實現png圖像的動畫,因此瞭解如何使用GDI +加倍緩衝區勢在必行。GDI +雙緩衝

我已經得到了一個PNG圖像轉換成一個Image對象,通過一個IStream:這裏是我的代碼的一部分,這將有助於你明白的地方我有麻煩:

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繪製到屏幕DC上時,沒有圖像出現!

有人可以請我指出正確的方向,如何有人將GDI加倍緩衝區?謝謝

+1

根本沒有錯誤檢查。所以當然你不知道爲什麼它不起作用。 – 2013-03-10 17:50:06

回答

2

我認爲你的問題可能在於你如何創建你的memDC - 你是否使用CreateCompatibleDC()創建它,以確保它與你正在執行BitBlt()的hdc兼容?

我已經回答類似這樣的問題關於雙緩衝之前之前,你可能會發現,答案有幫助:

GDI Acceleration In Windows 7/Drawing To Memory Bitmap

有代碼,還有,我用了很多雙緩衝帶GDI,但使用GDI或GDI +繪製到內存位圖。我發現它能夠使用GDI非常有用,因爲它對於某些操作(特別是與位圖相關的函數)比GDI +快得多,但是GDI +可以更輕鬆地完成一些操作,因此可以實現兩全其美。