Bitmap in DirectDraw
-
Ja, die datei ist schon ein 16 Bit Bild _
Das mit UCHAR verwirrt mich irgendwie. Im Buch stand erst, das UCHAR für 8 Bit verwendet wird und für alles darüber USHORT. und bei dem beispiel....hmm...
Und jetzt wo du das mit der Palette erwähnst...hmm...hab den Text noch mal durchgeguckt. könnte es sein, das die Funktion die 16 Bit Bilder in 8 Bit Bilder umwandelt? Irgendwie werde ich da gar nicht draus schlau.Wüsstest du vielleicht ein gutes Tutorial, das ich mir Parallel zum Buch angucken könnte? An dieser Stelle steht da nähmlich gar nichts hilfreiches.
mfg P
-
mhh hab jetzt nochmal in meinem Buch geguckt (ich frag mich immernoch warum die Quelltexte so gut wie identisch sind. Wer hat dein Buch geschrieben?). Die Bitmap_File Struktur wird hier genauso angegeben und auch die Funktionen scheinen im Großen und Ganzen die selben zu sein.
Dass UCHAR verwendet wird scheint nicht das Problem zu sein und auch die Palette wird nur bei 8 Bit Bildern geladen.
Von daher kann ich momentan leider auch nicht sagen, woran es liegt. Vielleicht kann dir noch jemand anders helfen...
Edit: Ok die Bücher haben den selben Autor (Andre LaMothe)...
-
Der Code sieht aus als könnte er 8Bit Bitmaps mit Palette und 16 Bit Bitmaps lesen.
Ist das was du lädst ne 16bit Bitmap? Standardformat der Grafikprogramme ist ja eigentlich eher 24Bit oder nich?
-
@geeky:
hab mich noch mal vergewissert, und es ist tatsächlich ein 24 Bit Bitmap...dabei ist es die Selbe datei, die der Autor in seinem Beispiel verwendet. Und ich konnte auch kein Prog finden, dases in 16 Bit Convertiert. Immer nur 24 Bit, 8 Bit oder noch tiefer. habs dann mal mit nem 8 Bit Bitmap versucht, bringt aber den selben effekt, wie zuvor.@Amateur:
Ist in deinem Buch der Quelltext denn beschrieben? Dann könnt ich ja mal sehen, ob mir das weiter hilft.
-
Ich glaub ich irre

16bit scheint der source in 16bit umzuwandeln, oder?
-
geeky schrieb:
Ich glaub ich irre

16bit scheint der source in 16bit umzuwandeln, oder?
hmm...ich weis jetzt nicht was du meinst.
Hast du dich vielleicht vertippt und meinst, das 24 Bit Bilder in 16 Bit umgewandelt werden?
-
jo, genau

Im Prinzip scheint der Source in Ordnung zu sein.
Prüf mal noch beim Aufruf den Rückgabewert von Load_Bitmap_File() und
macht aus dem "#if 0" mal nen "#if 1"Muss man bei der DDSURFACEDESC2-Struktur das Pixelformat gar nicht angeben?
-
Den Rückgabe Wert ausgeben? Ehrlich gesagt wüsste ich jetzt nicht wie ich daran gehen muss _'
Habs aber mal in "#if 1" geändert. War aber das selbe wie vorher.
Meinst du mit Pixelformat die Bittiefe?...Ich nehme an, das die Funktion diese Information aus den File Header der datei liest.
-
memset(&ddsd, 0, sizeof(ddsd)); // Hier wunderts mich das hier nirgends das Pixelformat angegeben // werden muss - Ich meine woher weiss DirectX dass das Surface mit // 16bit-Grafik gefüllt wird? - Aber ich bin kein DXler ;D ddsd.dwSize = sizeof(ddsd); ddsd.dwFlags = DDSD_CAPS; ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; if(lpdd->CreateSurface(&ddsd, &lpddsprimary, NULL) != DD_OK) { MessageBox(NULL, "Fehler Code 0004", "Fehler!", MB_OK); return 0; } // Quasi so zum Bleistift: if (Load_Bitmap_File(&bitmap16bit, "ANDRE16.BMP")==0) { MessageBox(NULL,"Load_Bitmap_File() ist fehlgeschlagen!","Fehler!",0); }
-
Ach mehr is das gar nich mit dem Rückgabe wert XD...
okay, hab ich gemacht und daran scheint es nicht zu liegen.
Hab jetzt auch einwenig weiter mit dem Quelltext rumgespielt.
mal das aus kommentiert und mal das...Und ich schätze, das der Fehler hierfor(int y=0; y < SCREEN_HEIGHT; y++) { memcpy(&primary_buffer[y*ddsd.lPitch], &bitmap16bit.buffer[y*SCREEN_WIDTH*2], SCREEN_WIDTH*2); }liegen muss, denn wenn ich einfach nur diese Zeilen auskommentiere, funktioniert alles...naja...jedenfalls vom eindruck her...das Bitmap wird natürlich nicht angezeigt...