2012-06-22 71 views
1

我想保存我的「屏幕」在bmp;但覺得我做錯了,因爲這個代碼實在是太慢了:GetPixel優化winapi

HDC Win = GetDC(NULL); 
for (j = 0; j < y; j++) 
    for (i = 0; i < x; i++) 
    img->data[j][i] = GetPixel(Win, i, j); 
+0

定義爲「非常慢」,即確切地說需要多長時間才能獲得什麼樣的大小輸入以及您運行了多少次測試才能獲得該數字?此外,除非您給我們您的編譯器設置,否則性能比較無關緊要。這就是說...'GetPixel'很慢。我會得到一個指向圖像數據本身的指針並在其上進行工作。 –

+0

可能重複[是否有更快的替代GDI GetPixel()?](http://stackoverflow.com/questions/4235731/is-there-a-faster-alternative-to-gdi-getpixel) –

+0

我已經1920 * 1080的分辨率和這個代碼需要1分鐘,我發現這個截圖真的很慢 – gfauchart

回答

5

CreateDIBSection創建位圖指針指向原始位,BitBlt從屏幕到創建位圖。這種方法的運行速度比像素逐像素查詢更快,並且您可以使用常規指針訪問內存中的所有數據。

請參閱Performing full screen grab in windows瞭解代碼段。