SDL Trasparente Surface erzeugen
-
Hallo alle zusammen,
ich programmiere gerade an einem kleinen Projekt und habe ein kleines/großes Problem. Ich kriege es nicht hin eine Surface transparent mit CreateSurface zu erzeugen, so das ich andere transparente Surfaces drauf blitten kann. Es soll nicht mit einen ColorKey gemacht werden, da die Farben die auf die Surface geblittet werden beliebig sein können.Habe schon google zu rate gezogen, konnte aber keine Lösung finden.
Habt Ihr einen Rat?
Gruß
DKing
-
Nun gut is doch nicht ganz so einfach aber nun gut
In wirklichkeit sau schwierig weils nämlich einfach eine SAU Dumme Funktion ist
aber nun gut stellen wir uns ein Surface namens Image vor (nartürlich ein Zeiger) und wir stellen uns drei Interger vor die eine RGB-Farbe darstellen soll die wir R,G und B nennen und dann muss man(n)einfach folgendes schreiben:
SDL_SetColorKey(Image,SDL_SRCCOLORKEY,SDL_MapRGB(Image->format,R,G,B));
Und das wars auch schon
‾
Nicht verzagen einfach iergendjemand fragen...
-
Uhhh, ich glaube ich kenne das Problem.
Wenn ich mich recht entsinne, ist die Ursache des ganzen das von dem RGBA Wert der Quelle das RGB mit dem RGB des Ziels zusammengeführt wird, während der A Wert des Ziels völlig unverändert bleibt - d.h. blittet man ein opaque pixel auf ein Stelle, die im Ziel transparent ist, verschwindet dieser pixel (da transparent).
Die erste Lösung die ich gemacht hab als ich dieses Problem hatte:
Eine Funktion geschrieben (oder aus der SDL doku geklaut und modifiziert) die die alphawerte nach dem blit manuel kopiert, bzw zusammenführt.
Imho eine nicht ideale Lösung.
Als zweites habe ich das Programm so neu strukturiert, das solche blits nicht mehr notwendig sind - einzig gute Lösung.Sollte dein Problem tatsächlich daran liegen dass du das CreateSurface versaust, dann zeig mal den code. :>
-
nimm sfml!
-
Und sfml weiß magischerweise ob du Alphawerte mit übertragen willst oder nicht? Cool.
(Natürlich gesetzt dem Fall dass ich mit meiner Vermutung recht habe.)