24 bit bmps in ein surface laden.....



  • Hi !
    Ich lern grad mit DirectX und c++ games zu coden .
    jetzt stellt sich für mich ein problem da und zwar wie ,
    wie der titel schon sagt 😃 die umstellung von 256 farben auf eine
    " höhrer " bit zahl wie zb 24 bit. Wie kann ich ein 24 bit bmp zb. test.bmp
    in ein Surface laden ?
    danke im vorraus ;).



  • Hi, wie hast du es denn bei 8 bit gemacht?
    Eine Möglichkeit Bitmaps (egal welcher Farbtiefe) in Offscreen-Surfaces zu laden, besteht darin die Methode IDirectDrawSurface::GetDC(HDC *pHdc) für das Surface aufzurufen, in das du das Bitmap laden willst. Dann kannst du mit dem im Parameter übergebenen hdc alle Sachen machen, die du auch unter Windows mit GDI machen kannst, zB Bitmaps draufklastschen. Am Ende verwendest du dann IDirectDrawSurface::ReleaseDC(HDC hdc) um GDI wieder zu verabschieden..
    Diese Methode setzt aber Kenntnisse in GDI und WinApi vorraus. Hoffe kennst dich mit aus;) Wenn nicht kann ich dir auch mal bißchen Beispielcode posten oder mailen, wenn du willt 🙂

    cu crass



  • thx!
    Ich habe das nur gefragt weil ich etwas verwirrt wurde durch ein tut
    indem über dem umstieg vom 8 bit auf 24 bit für die meißten schwer ist und
    da hab ich mir das mal angesehen und wurde durch die graue theorie verwirrt
    die darin stand.
    Ich würde mich über ein bißchen beispiel code freuen 😃 ,
    da ich mich mit gdi nur mit dem wichtigsten auskenne 😃 ,
    und über dass bmp laden weiss ich leider noch nichts 😞 .

    Eine frage :
    wenn man das gdi beim ddraw mit rein macht verliert man dann etwas speed?

    [ Dieser Beitrag wurde am 02.02.2003 um 18:37 Uhr von real goku editiert. ]



  • GDI bremst DX aus, aber in der Init-Phase machts nix, da es da ja noch nicht auf Speed ankommt. Nur kein GDI verwenden für Sachen die in jedem Frame der Hauptschleife durchgeführt werden!

    Ein Bitmap mit GDI laden geht schmutzig gecodet ohne Fehlerbehandlung etc. etwa so: (hoffe sind keine Fehler drin, habs nicht getestet)

    FileName ist ein String auf den Dateinamen, hdc wurde mit IDirectDrawSurface::GetDC() ermittelt, Width und Height sind Breite und Höhe des Bitmaps (kann man auch nach LoadImage mit GetObject() ermitteln)

    HBITMAP hb=(HBITMAP)LoadImage(NULL,FileName,IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);
    HDC hdcComp=CreateCompatibleDC(hdc);
    SelectObject(hdcComp,hb);
    BitBlt(hdc,0,0,Width,Height,hdcComp,0,0,SRCCOPY);
    DeleteDC(hdcComp);
    DeleteObject(hb);
    


  • danke. Ich werde jetzt erst mal den code testen...



  • Hi nochmal . ich habe das jetzt zwar verwendet aber jetzt stürtzt das prog
    beim init. ab . wisst ihr woran das liegt??



  • Dieser Beitrag wurde gelöscht!


  • danke :D. ich schau ihn mir mal an aber ich glaube ich habe den fehler .



  • Original erstellt von Headhunter:
    Das ist so weil 24 Bits ja eigentlich nur 16 Bits haben. Die letzten 8 Bits werden meistens freigelassen oder mit Zusatzinformationen gefüllt.

    So ein Blödsinn! Ein Moderator sollte hier doch ein wenig mehr ahnung haben!!!



  • hmm vielleicht kannst du mir ja helfen.
    der fehler is wie folgt : beim setdisplaymode(); --> ich kann 8 bits wunderbar nehmmen 16 auch 32 auch nur 24 nicht warum ???



  • die meisten modernen grafikkarten unterstützen kein 24 bit mehr
    zu langsam
    prozessoren arbeiten mit 32 bits
    konvertierung
    langsam, dumm
    darum 32 bits
    mehr speicherbedarf
    aber auch mehr speed
    klar?
    ja.
    danke
    tschüss
    auf wiederlesen


Anmelden zum Antworten