Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

1

21.02.2011, 13:07

SDL_CreateRGBSurface und Transparenz

Ich hab schon einige Stunden gesucht und verschiedenes probiert, aber irgendwie bekomme ich es einfach nicht hin -.-
Ich möchte aus einer vorhanden transparenten Grafik Teilgrafiken "ausschneiden". Dazu erstelle ich bisher immer eine neue Surface mittels SDL_CreateRGBSurface mit den vorhanden Teilgrößen und blitte damit den entsprechenden Ausschnitt der original Grafik auf diese neu erstellte.

Das sieht vereinfacht so aus:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
SDL_Surface * copy = SDL_CreateRGBSurface(
    SWSURFACE,
    orig_surface.width, orig_surface.height, 32,
    0, 0, 0, 0
);

SDL_BlitSurface(
    orig_surface,
    rect,
    copy,
    null
);


Doch diese neue Surface ist, weil ich beim erstellen die Standardangaben benutzt habe, nicht transparent sondern hat einen schwarzen Hintergrund.
Nun hatte ich gedacht, und bislang hatte es eig. auch immer so geklappt, setze ich halt einfach einen schwarzen Colorkey.
Doch dieses mal scheint das nicht zu klappen, ich erhalte schwarze Pixelreste an den Rändern wie es an diesem Auszug zu sehen ist:

(Link)


Weiß einer ob und wenn, wie das weggeht? Oder liegt es zwangsweise an der Grafik?
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Stazer

Alter Hase

Beiträge: 468

Wohnort: Berlin

Beruf: Student

  • Private Nachricht senden

2

21.02.2011, 13:26

Ich kenne mich mit der SDL nicht aus, doch ich kann Dir sagen, dass es an der Grafik liegt.
Wenn der Colorkey schwarz ist, dann ist die Hexdezimale Schreibweise ja #000000.
Die Ränder an deiner Grafik dort, sind dann aber nicht #000000 ( also schwarz ) sondern z.b. #000001 oder #001000.
Daran liegt das...

MfG Stazer

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

3

21.02.2011, 13:30

Danke für die schnelle Antwort.
Aber wie können sie eine derartige Farbe annehmen, wenn der Hintergrund Schwarz ist und der Colorkey ebenso?

edit: um das nochmal zu betonen (allein der Ehre wegen für meinen Grafiker :D) Die Original Grafik die das ganze Spritesheet bereitstellt (also aus der die ganzen Teilgrafiken herausgeschnitten werden), ist zu 100% transparent.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

DerMark

Treue Seele

Beiträge: 324

Wohnort: Emsdetten

Beruf: Softwareentwickler

  • Private Nachricht senden

4

21.02.2011, 13:41

Ich nehme an das hier ein Texturfilter mitmischt, ich nehme an man kann sowas in SDL einstellen? Dann versuche es mal mit Pointfiltering, damit sollte dies beseitigt sein.

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

5

21.02.2011, 13:45

Um ehrlich zu sein, keine Ahnung, von sowas habe ich in der SDL noch nie gehört und finde auch nichts entsprechendes gerade.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

6

21.02.2011, 14:54

Stazer hat vermutlich recht.
Die Original Grafik die das ganze Spritesheet bereitstellt (...) ist zu 100% transparent.
Bist du dir denn wirklich ganz sicher, dass auch die Ränder der Grafik zu 100% transparent sind? Insbesondere, wenn du "weiche" Kanten in deiner Grafik hast, dann kommt das dadurch zu Stande, dass tatsächlich die Randpixel leicht bzw. halb transparent sind. Du kannst in deiner Grafik mal mit einem Radierer-Werkzeug (100% Deckkraft + 100% Kantenschärfe / -härte) ganz bewusst die Konturen nachfahren, das sollte solche "weichen" Kanten beseitigen. Aber letzten Endes sieht es dann auch dementsprechend bescheiden aus.

Gruß
SaRu_

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

7

21.02.2011, 15:02

Ich kann dir die -Grafik gerne mal zeigen bzw. hier anhängen, derzeit befindet sich darin allerdings noch eine Zelda Grafik weswegen ich unsicher war, sie gleich zu Anfang zu posten (;
Ich werde deine Angaben meinem Grafiker mal geben, mal sehen, was er dazu sagt bzw. ob es ggf. hilft.

edit: hier mal das Animationssheet.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Architekt« (21.02.2011, 15:17)


DerMark

Treue Seele

Beiträge: 324

Wohnort: Emsdetten

Beruf: Softwareentwickler

  • Private Nachricht senden

8

21.02.2011, 15:36

Ah diese Ränder, sry da habe ich was falsch gesehen.

So wie es aussieht hast du kein normales Alphablending sondern Alphatest aktiviert, Selbst wenn du dies änderst werden diese hellen Kreise und Linien dunkler werden du sie zeichnest, um das zu verhindern musst du bzw dein Grafiker die Hintergrundfarbe auf diese Glowfarbe setzen und den Effekt allein durch den Alphakanal lösen, nicht RGB und A abmindern, dies führt zu sehr unschönen Effekten.

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

9

21.02.2011, 16:02

Ah, ok. Danke schon mal. :)

edit:
Ich hab sie zu Testzwecken mal manuell ausgeschnitten und geblittet. Dies funktioniert. Kann mir jemand erklären, was genau schief läuft wenn ich sie im Code ausschneide und auf eine neu erstellte Surface kopiere?
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Architekt« (21.02.2011, 16:09)


10

21.02.2011, 16:15

Hier mal noch ein kleiner Vergleich, wie deine Grafik unter dem Photoshop-Mikroskop aussieht.



Blöder Weise sieht beides nicht sonderlich schön aus. Entweder der von dir beschriebene Effekt oder harte, pixelige Konturen. Das ist bei der SFML deutlich bequemer, da die einfach den Alpha-Kanal deiner Grafik anwendet.

Gruß
SaRu_

Werbeanzeige