F
Hallo,
Ich hab mittels der Hilfefunktion "LoadBitmap" vom DirectX 7 SDK eine Bitmap in eine DirectDraw-Surface geladen. Ich hab aber beim Hauptobjekt die Funktion "SetDisplayMode" nicht verwendet, und die Bit-Tiefe der Surface entspricht also der, von der Bitmap.
Ich hab jetzt also eine gefüllte Surface mit 24-Bit Bilddaten und ich möchte diese Bilddaten gerne in 16-Bit haben. Im SDK hab ich was davon gelesen, das man dies durch die Funktion "SetSurfaceDesc" machen kann.
Nach ein paar Stunden bin ich also zu folgendem Code gekommen, welcher in der Funktion "SetSurfaceDesc" abstürzt, weil weder "testwindow1" noch "testwindow2" angezeigt wird.
DDSURFACEDESC2 ddsdOld; // Alte Surface-Beschreibung
DDSURFACEDESC2 ddsdNew; // Neue Surface-Beschreibung mit 16-Bit-Daten
HRESULT ddrval;
// Alte Surface-Beschreibung laden
ZeroMemory (&ddsdOld, sizeof (ddsdOld));
ddsdOld.dwSize = sizeof (ddsdOld);
ddrval = lpDDSurf->GetSurfaceDesc (&ddsdOld);
if (ddrval != DD_OK)
{
return FALSE;
};
// Ändern der Daten für 16-Bit
ZeroMemory (&ddsdNew, sizeof (ddsdNew));
ddsdNew.dwSize = sizeof (ddsdNew);
ddsdNew.dwFlags = DDSD_PITCH | DDSD_PIXELFORMAT;
ddsdNew.ddpfPixelFormat = ddsdOld.ddpfPixelFormat;
ddsdNew.ddpfPixelFormat.dwFlags = ddsdOld.ddpfPixelFormat.dwFlags | DDPF_RGB;
ddsdNew.ddpfPixelFormat.dwRGBBitCount = 16; // Für 16 Bit
ddsdNew.lPitch = ddsdOld.dwWidth*2; // 16Bit = 2 Byte = Breite * 2
// Einstellen der neuen Surface-Beschreibung
ddrval = lpDDSurf->SetSurfaceDesc (&ddsdNew, 0);
if (ddrval != DD_OK)
{
MessageBox (NULL, "testwindow 1", NULL, MB_OK);
return FALSE;
};
MessageBox (NULL, "testwindow 2", NULL, MB_OK);
Könnte mir bitte jemand sagen, was ich falsch mache, oder mir einen andere Möglichkeit, diese Bit-Konvertierung durchzuführen zeigen. Danke!
m.f.G. Daniel Lang