Transparent-Color eines PNG verstellen bzw einstellen.

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Transparent-Color eines PNG verstellen bzw einstellen.

Beitrag von DrShrek »

Hallo,

Habe ein PNG welches keine Transparent Color beinhaltet.
Die Background Farbe ist RGB(255,255,255). Das Farbe möchte ich gerne als Transparent-Color definieren und dann das PNG wieder abspeichern. Habt Ihr eine Idee wie ich das mit PureBasic anstellen kann?
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Re: Transparent-Color eines PNG verstellen bzw einstellen.

Beitrag von Thorium »

Als Datei öffnen und Chunk hinzufügen.
Hier findest du die nötigen Infos übers Dateiformat: http://www.libpng.org/pub/png/
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Transparent-Color eines PNG verstellen bzw einstellen.

Beitrag von ts-soft »

Code: Alles auswählen

EnableExplicit

UsePNGImageDecoder()
UsePNGImageEncoder()

Procedure CustomCallback(x, y, QuellFarbe, ZielFarbe)
  If QuellFarbe = RGBA(255, 255, 255, 255)
    ProcedureReturn RGBA(255, 255, 255, 0)
  Else
    ProcedureReturn QuellFarbe
  EndIf
EndProcedure

Define.s File

File = OpenFileRequester("", "", "", 0)
If File
  If LoadImage(0, File)
    If CreateImage(1, ImageWidth(0), ImageHeight(0), 32)
      StartDrawing(ImageOutput(1))
        DrawingMode(#PB_2DDrawing_CustomFilter)
        CustomFilterCallback(@CustomCallback())
        DrawAlphaImage(ImageID(0), 0, 0)
      StopDrawing()
      File = SaveFileRequester("", "", "", 0)
      If File
        SaveImage(1, File, #PB_ImagePlugin_PNG)
      EndIf
    EndIf
  EndIf
EndIf
Damit auch "schmutziges" weiß berücksichtigt wird, ist das If im Callback entsprechend zu erweitern.

Hier noch ein kleines Beispiel. Hab den Hintergrund des Fensters auf Blau gesetzt, damit man es besser
erkennt :wink:

Code: Alles auswählen

EnableExplicit

Define.s File = GetTemporaryDirectory() + "Ok.png"

InitNetwork()
UsePNGImageDecoder()

Procedure CustomCallback(x, y, QuellFarbe, ZielFarbe)
  If QuellFarbe = RGBA(255, 255, 255, 255)
    ProcedureReturn RGBA(255, 255, 255, 0)
  Else
    ProcedureReturn QuellFarbe
  EndIf
EndProcedure

If FileSize(File) <= 0
  ReceiveHTTPFile("https://dl.dropbox.com/u/3086026/Ok.png", File)
EndIf

If LoadImage(0, File)
    If CreateImage(1, ImageWidth(0), ImageHeight(0), 32)
      StartDrawing(ImageOutput(1))
        DrawingMode(#PB_2DDrawing_CustomFilter)
        CustomFilterCallback(@CustomCallback())
        DrawAlphaImage(ImageID(0), 0, 0)
      StopDrawing()
    EndIf
    OpenWindow(0, #PB_Ignore, #PB_Ignore, 330, 170, "Transparent Test")
    SetWindowColor(0, $FF0000)
    ImageGadget(0, 10, 10, 150, 150, ImageID(0))
    ImageGadget(1, 170, 10, 150, 150, ImageID(1))
    While WaitWindowEvent() <> #PB_Event_CloseWindow : Wend
EndIf
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Re: Transparent-Color eines PNG verstellen bzw einstellen.

Beitrag von DrShrek »

@ts-soft,
Dafür ein dickes Bussi. Hast Dir das echt verdient :oops:
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Transparent-Color eines PNG verstellen bzw einstellen.

Beitrag von ts-soft »

Solange Dir Perlweiß reicht, ist es ja gut. Ansonsten würde ich STARGÅTE mal anhauen, der
hat bestimmt auch eine Formel parat um schmutziges Weiß, also die kleinen häßlichen Ränder
zu berechnen.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Re: Transparent-Color eines PNG verstellen bzw einstellen.

Beitrag von Thorium »

Wobei Alphakanal und transparente Farbe streng genommen nicht das gleiche ist.
PNG unterstützt das definieren von Farben als Transparent ohne Alphakanal.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Antworten