Seite 1 von 1
Transparent-Color eines PNG verstellen bzw einstellen.
Verfasst: 21.02.2013 20:35
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?
Re: Transparent-Color eines PNG verstellen bzw einstellen.
Verfasst: 27.02.2013 14:59
von Thorium
Als Datei öffnen und Chunk hinzufügen.
Hier findest du die nötigen Infos übers Dateiformat:
http://www.libpng.org/pub/png/
Re: Transparent-Color eines PNG verstellen bzw einstellen.
Verfasst: 27.02.2013 15:43
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
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
Re: Transparent-Color eines PNG verstellen bzw einstellen.
Verfasst: 27.02.2013 19:43
von DrShrek
@ts-soft,
Dafür ein dickes Bussi. Hast Dir das echt verdient

Re: Transparent-Color eines PNG verstellen bzw einstellen.
Verfasst: 27.02.2013 20:11
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.
Re: Transparent-Color eines PNG verstellen bzw einstellen.
Verfasst: 01.03.2013 14:48
von Thorium
Wobei Alphakanal und transparente Farbe streng genommen nicht das gleiche ist.
PNG unterstützt das definieren von Farben als Transparent ohne Alphakanal.