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 willtcu 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