Pixelverlust bei Verzerrung mit IDirectDrawSurface::Blt
-
Also ich hab folgendes Problem: Ich zeichne eine Linie auf ein 1024x768 großes Surface (kartenSurface) und blite dann dieses Surface in das 250/0 bis 1024/768 Rect auf dem backbufferSurface (lpddsBack). Daher wird die Zeicheninformation des kartenSurfaces verzerrt (verkleinert) auf dem backSurface wiedergegeben. Das Problem, das hierbei entsteht, ist, dass dabei Pixelinformationen einfach verschwinden, denn meine einst durchgezogene Linien verwandelt sich in eine gestrichelte Linie (daher: es gibt regelmäßige Lücken). Kann mir jemand erklären, wie dies zu stande kommt und was ich dagegen machen kann (außer kartenSurface verkleinern :>)?
Hier nochmal die wichtigen Codeauszüge
//kartenSurface initialisiern kartenSurfaceDesc.dwSize = sizeof(DDSURFACEDESC2); kartenSurfaceDesc.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT; kartenSurfaceDesc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY; kartenSurfaceDesc.ddsCaps.dwCaps2 = 0; kartenSurfaceDesc.dwWidth = 1024; kartenSurfaceDesc.dwHeight = 768; if (lpDirectDraw->CreateSurface(&kartenSurfaceDesc, &kartenSurface, NULL) != DD_OK) { MessageBox(NULL, "Erzeugen der Bildzeichenflaeche fehlgeschlagen!", NULL, MB_OK); } SetRect(&kartenRect, 250, 0,1024,768);
und das eigentlichen zeichnen und blten
HDC DC; kartenSurface->GetDC(&DC); MoveToEx(DC, 50, 50, (LPPOINT) NULL); LineTo(DC,200,433); kartenSurface->ReleaseDC(DC); lpddsBack->Blt(&kartenRect, kartenSurface, NULL, DDBLT_WAIT, NULL);