0
好吧,我的雙緩衝區工作正常,但它似乎使用了大量的內存。C++雙緩衝區和內存
我知道雙緩衝區應該存儲我繪製的橢圓的副本,而不是將其繪製在屏幕上,但之後它會刪除副本並創建新副本,但似乎並未將其刪除 這裏是我的代碼
hdc=GetDC(hWnd);
HDC memDC=CreateCompatibleDC(hdc);
HBITMAP hMemMap=CreateCompatibleBitmap(hdc, 300, 300);
HBITMAP hOldMap=(HBITMAP)SelectObject(memDC, hMemMap);
// Drawing
Graphics draw(memDC);
draw.FillRectangle(&green, 0, 0, 300, 25);
Font font(&fontfamily, 14, 0, UnitPixel);
PointF p1(180.0f, 4.0f);
PointF p2(30.0f, 4.0f);
draw.DrawString(level, -1, &font, p2, &blue);
draw.DrawString(str, -1, &font, p1, &blue);
draw.FillEllipse(&red, ball1.Ex, ball1.Ey, 25, 25);
draw.FillEllipse(&red, ball2.Ex, ball2.Ey, 25, 25);
draw.FillEllipse(&red, ball3.Ex, ball3.Ey, 25, 25);
draw.FillEllipse(&red, ball4.Ex, ball4.Ey, 25, 25);
draw.FillEllipse(&red, ball5.Ex, ball5.Ey, 25, 25);
draw.FillEllipse(&red, ball6.Ex, ball6.Ey, 25, 25);
draw.FillEllipse(&red, ball7.Ex, ball7.Ey, 25, 25);
draw.FillEllipse(&red, ball8.Ex, ball8.Ey, 25, 25);
draw.FillEllipse(&red, ball9.Ex, ball9.Ey, 25, 25);
draw.FillEllipse(&red, ball10.Ex, ball10.Ey, 25, 25);
BitBlt(hdc, 0, 0, 300, 300, memDC, 0, 0, SRCCOPY);
SelectObject(memDC, hOldMap);
DeleteObject(hMemMap);
DeleteDC(memDC);
任何想法?
當你說它沒有被刪除,你的意思是內存使用不會減少?每次調用這個函數時,內存使用量會不斷增加? – 2010-08-17 20:37:16
我不知道在這種情況下,但通常雙緩衝不涉及刪除任何東西。你畫到「後臺緩衝區」(複製屏幕沒有顯示),然後當你完成時,你「交換緩衝區」,所以看起來你在同一時間畫了一切。你保留舊的緩衝區以便爲下一幀畫畫。每個框架,你交換顯示哪一個,以及你繪製哪一個。在像這樣的設計中沒有空間去分配...... – 2010-08-17 20:42:54
是的,它增加了。但它不會減少 – Ramilol 2010-08-17 20:43:03