SetSurfaceDesc



  • 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


Anmelden zum Antworten