Przyspieszenie GDI W systemie Windows 7 / Rysunek do pamięci Bitmapa
Mój program GDI działa dobrze w systemie Windows XP, ale w systemie Windows Vista i 7 wygląda to dość okropnie z powodu braku akceleracji sprzętowej GDI. Pamiętam, że przeczytałem kilka lat temu artykuł mówiący, że Windows 7 dodał sprzętową akcelerację do niektórych funkcji GDI, w tym funkcji BitBlt (). Podobno, jeśli narysujesz bitmapę pamięci, a następnie użyjesz BitBlt (), aby skopiować obraz do głównego okna, będzie on działał z tą samą prędkością co XP. Czy to prawda?
Jeśli to prawda, jak to robisz? Jestem straszny w programowaniu i mam trochę kłopotów. Stworzyłem poniższą klasę, aby spróbować ją uruchomić:
class CMemBmpTest
{
private:
CDC m_dcDeviceContext;
CBitmap m_bmpDrawSurface;
public:
CMemBmpTest();
~CMemBmpTest();
void Init();
void Draw();
};
CMemBmpTest::CMemBmpTest()
{
}
CMemBmpTest::~CMemBmpTest()
{
m_bmpDrawSurface.DeleteObject();
m_dcDeviceContext.DeleteDC();
}
void CMemBmpTest::Init()
{
m_dcDeviceContext.CreateCompatibleDC(NULL);
m_bmpDrawSurface.CreateCompatibleBitmap(&m_dcDeviceContext, 100, 100);
}
void CMemBmpTest::Draw()
{
m_dcDeviceContext.SelectObject(I.m_brshRedBrush);
m_dcDeviceContext.PatBlt(0, 0, 100, 100, BLACKNESS);
}
W funkcji OnPaint () okna dodałem linię:
pDC->BitBlt(2, 2, 100, 100, &m_MemBmp, 0, 0, SRCCOPY);
Miałem nadzieję zobaczyć czarną skrzynkę 100x100 w rogu okna, ale to nie zadziałało. Prawdopodobnie robię wszystko okropnie źle, więc byłbym wdzięczny, gdyby ktoś mógł mi doradzić, jak to zrobić poprawnie.
Dziękujemy za wszelkie porady, które możesz zaoferować.