SDL get_pixel problem
-
hmm jetzt lad ich ne 32 bit bitmap, funzt auch, nur wenn ich sie blitte, bleibt der bildschirm einfach schwarz
-
Du kannst eine SDL-Surface im gewünschten Format erzeugen (32 Bit) und dort einfach die Original-Surface reinkopieren (Blt).
Warum es abstürzt? Ist doch klar: im Speicher ist ein Pixel 3 Bytes groß, du liest aber jedes Mal vier. D.h. du kriegst nicht nur falsche Farben, sondern liest auch zu weit, und irgendwann liest du über den Speicherbereich hinaus.Beispiel für ein Bild mit nur 8 Pixeln: So liegen die Daten im Speicher (bei 24 Bits): RGBRGBRGBRGBRGBRGBRGBRGB 1 2 3 4 5 6 7 8 (Pixel-Nr.) und so liest du: RGBARGBARGBARGBARGBARGBARGBARGBA 1 2 3 4 5 6 7 8 (Pixel-Nr.)Beim 7. Pixel bist du schon über's Ziel hinausgeschossen.
-
jau danke habs gecheckt...kannst mir trotzdem sagen, warum das blitten nicht geht ?
-
Nicht ohne den Code zu sehen

-
jo, code so wie eben, mit ner 32 bit bitmap und
SDL_Rect ir; ir.x = 0; ir.y = 0; ir.w = MAP_WIDTH; ir.h = MAP_HEIGHT; SDL_Rect sr; sr.x = 0; sr.y = 0; sr.w = SCREEN_WIDTH; sr.h = SCREEN_HEIGHT; SDL_BlitSurface(cMap.mapImage, &ir, screen, &sr); //apply_surface( 0, 0, pSurface, screen ); if( SDL_Flip( screen ) == -1 ) { return 1; }in der hauptprogrammschleife
edit:
if(SDL_BlitSurface(cMap.mapImage, &ir, screen, &sr) != 0) { return 1; }bricht NICHT ab Oo
-
Du versuchst, die komplette Map - die größer ist als der Bildschirm (wie ich annehme) - auf den Bildschirm zu blitten. Ändere dein Source-Rectangle mal so, dass es höchstens so groß wie der Bildschirm ist.
Daran könnte es liegen ...
-
TomasRiker schrieb:
Du versuchst, die komplette Map - die größer ist als der Bildschirm (wie ich annehme) - auf den Bildschirm zu blitten. Ändere dein Source-Rectangle mal so, dass es höchstens so groß wie der Bildschirm ist.
Daran könnte es liegen ...ist es doch
ir.w = MAP_WIDTH; ir.h = MAP_HEIGHT;
-
Benutze anstatt Rects einfach mal NULL. Ich glaube das sollte gehen, wenn du das ganze Bild blitten willst.
-
das bild ist aber grösser als mein fenster
-
Hast du's probiert?
-
Stefan schrieb:
Hast du's probiert?
ja
-
pixartist schrieb:
TomasRiker schrieb:
Du versuchst, die komplette Map - die größer ist als der Bildschirm (wie ich annehme) - auf den Bildschirm zu blitten. Ändere dein Source-Rectangle mal so, dass es höchstens so groß wie der Bildschirm ist.
Daran könnte es liegen ...ist es doch
ir.w = MAP_WIDTH; ir.h = MAP_HEIGHT;Nö. Ist größer als der Bildschirm (es sei denn dein Bildschirm hat mehr als 2000 Pixel in der Horizontalen).
-
TomasRiker schrieb:
pixartist schrieb:
TomasRiker schrieb:
Du versuchst, die komplette Map - die größer ist als der Bildschirm (wie ich annehme) - auf den Bildschirm zu blitten. Ändere dein Source-Rectangle mal so, dass es höchstens so groß wie der Bildschirm ist.
Daran könnte es liegen ...ist es doch
ir.w = MAP_WIDTH; ir.h = MAP_HEIGHT;Nö. Ist größer als der Bildschirm (es sei denn dein Bildschirm hat mehr als 2000 Pixel in der Horizontalen).
ups denkfehler...
SDL_Rect ir; ir.x = 0; ir.y = 0; ir.w = SCREEN_WIDTH; ir.h = SCREEN_HEIGHT; SDL_Rect sr; sr.x = 0; sr.y = 0; sr.w = SCREEN_WIDTH; sr.h = SCREEN_HEIGHT; if(SDL_BlitSurface(cMap.mapImage, &ir, screen, &sr) != 0) { return 1; }geht allerdings auch nicht
edit: soll ich dir mal den ganze code geben?
