Remove Backround

  • GM 8

    Remove Backround

    Hi Leute,
    Ich wollte heute ein Bild als Sprite laden, dabei stand mit die Möglichkeit offen, den Hintergrund zu löschen ("remove Backround"). Da mir sowas interessant vorkam, wollte ich fragen, ob man das selbe auch als Code nutzen kann, sowas wie remove_backround() :D.

    Danke im voraus
    Septimus :)
    1, deine Funktion existiert nicht! :D (wahrscheinlich meintest du background_delete() )
    2, ich meine nicht das ein Background gelöscht wird sondern das die Hintergrund Farbe (Weil ich ein Zeichenprogramm gemacht habe, das auch die weiße Farbe vom Raum im Bild mit abspeichert) von einem Sprite gelöscht wird. Also so, das um das Sprite herum kein Weißer Kasten, sondern der Hintergrund vom Raum zu sehen ist!
    Henrik: Wir sind hier aber nicht im Studio-Forum...
    Die EInzige Möglichkeit die ichs ehe ist das Sprite erneut als background abzuspeichern und dann wieder zu laden und dabei diese Funktion zu verwenden.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
    Da brauchst du kein Studio. Nutze ein Surface als Buffer, übertrage jeden Pixel. Jeder der deiner transparenten Farbe entspricht fällt weg, dazu musst du den Alpha-Kanal allerdings erst platt machen.

    In diesem Beispiel dürfte ein Skript enthalten sein, welches die Pixel über eine DLL bezieht. Sollte leicht anpassbar sein. Abgesehen davon, könntest du natürlich deine Bildchen auch direkt mit richtigem Alpha-Kanal speichern. Dazu muss dein Editor nur auf ein Surface arbeiten.
    Ab (ich glaube) 8.0 speichert der GM ohnehin alle Screenshots und Abbilder von Surfaces als pngs ab, die von Natur aus einen Alphakanal besitzen. Da kann man auch die nativen Funktionen zum Pixelvergleichen nutzen, wenn man nicht yet another DLL einbinden will - diese internen Funktionen sind allerdings ziemlich langsam und bei großen Surfaces und häufigen Aufrufen im Spiel mit Vorsicht zu genießen, da ist dann eine DLL doch die bessere Wahl.
    Ich hab da jedenfalls mal kurz ein Beispiel zusammengehackt, das mit einer 128x128-Surface arbeitet. Du kannst die farbigen Knöpfe unter dem Bild anklicken, dann werden die Pixel der entsprechenden Farbe auf der Surface transparent geschaltet. Das Programm arbeitet mit surface_getpixel, also wunder dich nicht, wenn das ein wenig dauert. Das Ding friert nicht ein, es arbeitet nur ziemlich lange. ;)
    Dateien
    Aber in wie fern kann ich das nutzen?

    Du kannst in einem Pixelshader die Pixeldaten verändern wie du willst, also auch durch eine andere Farben ersetzen.

    • Surface erstellen
    • Shader setzen
    • Sprite draufzeichnen
    • Surface zu Sprite o.ä. machen
    • aufräumen


    Da das ganze auf der Grafikkarte ausgeführt ist, ist das viel schneller als einzel auf einen Pixel zuzugreifen.
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%