Programm um Transparenz wiederherzustellen

Übersicht Sonstiges Smalltalk

Neue Antwort erstellen

Nova

Betreff: Programm um Transparenz wiederherzustellen

BeitragSo, Jul 04, 2010 16:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe ein Bild mit Alphakanal, allerdings komme ich da nicht ran. Ich kann also es zwar darstellen, aber nicht bearbeiten. Leider bringt ein Screenshot auch nichts, da ich so nicht an die Transparenz ran komme.
Ich brauche daher ein Programm, das aus zwei Bildern, einmal das Transparenzbild auf schwarzem Hintergrund und einmal das Transparenzbild auf weißem Hintergrund, wieder das Tranzparenzbild herstellt.
Ist ein bisschen kompliziert, hier mal ein Bild, was ich genau meine:

user posted image

Wenn ich diesem Programm also die ersten zwei Bilder gebe, soll das dritte Bild erstellt werden.
Weiß jemand, ob es so ein Programm gibt? Vielleicht sogar in BlitzBasic oder BlitzMax?


(Hintergrund dazu ist, dass man nicht so ohne weiter aus einem Bild erkennen kann, ob es früher mal Transparenz enthielt. Daher muss man einem Programm sagen, dass das Bild gerade auf einem speziellen Hintergrund abgebildet wird. Um Komplikationen zu vermeiden muss es aber einmal aus Schwarz und einmal auf weiß abgebildet werden.)

Gruß, Nova
AMD Athlon II 4x3,1GHz, 8GB Ram DDR3, ATI Radeon HD 6870, Win 7 64bit

ZaP

BeitragSo, Jul 04, 2010 17:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Gimp hilft hier: Menüleiste > Farben > Farbe zu Transparenz
BB3D kann das auch, mit dem Texturfilter 2 oder 4
Starfare: Worklog, Website (download)

mpmxyz

BeitragSo, Jul 04, 2010 17:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich kenne zwar kein Programm, welches so etwas schafft, aber ich weiß, wie man es lösen kann:
Die ausgegebene Farbe wird nämlich über diese Formel berechnet:
Code: [AUSKLAPPEN]
ausgegebeneFarbe=alpha*FarbeBild+(1.0-alpha)*FarbeHintergrund

(Alpha ist dabei im Bereich von 0 bis 1)
Man bekommt durch die zwei gegebenen Bilder ein Gleichungssystem mit zwei Gleichungen und zwei Unbekannten:
Code: [AUSKLAPPEN]
ausgegebeneFarbe1=alpha*FarbeBild+(1.0-alpha)*FarbeHintergrund1
ausgegebeneFarbe2=alpha*FarbeBild+(1.0-alpha)*FarbeHintergrund2

Man löst die zweite Gleichung nach "FarbeBild" auf und setzt das Ergebnis in die erste Gleichung ein:
Code: [AUSKLAPPEN]
FarbeBild=(ausgegebeneFarbe2-(1.0-alpha)*FarbeHintergrund2)/alpha ;nach FarbeBild aufgelöste Gleichung 2
ausgegebeneFarbe1=(ausgegebeneFarbe2-(1.0-alpha)*FarbeHintergrund2)+(1.0-alpha)*FarbeHintergrund1 ;Gleichung 1 nach Einsetzung

Nun löst man die entstandene Gleichung nach alpha auf:
Code: [AUSKLAPPEN]
alpha=(ausgegebeneFarbe2-ausgegebeneFarbe1-FarbeHintergrund2+FarbeHintergrund1)/(FarbeHintergrund1-FarbeHintergrund2)

Das erhaltene Ergebnis für den Alpha-Wert setzt man in die nach FarbeBild aufgelöste Gleichung 2 ein und erhält so die Originalfarbe des Bildes. (Wenn alpha=0 gilt, dann kann man die Originalfarbe an dieser Stelle nicht bestimmen. Das, was ich in den Gleichungen "Farbe" genannt hatte, ist übrigens für jede Farbkomponente einzeln gemeint.)

Ich hoffe, dass dieser Lösungsweg halbwegs verständlich ist.
Wenn du fragen hast, darfst du sie ruhig stellen. Smile
mfG
mpmxyz
P.S.: Wie kommst du eigentlich auf so ein Problem?
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

Nova

BeitragSo, Jul 04, 2010 17:27
Antworten mit Zitat
Benutzer-Profile anzeigen
ZaP hat Folgendes geschrieben:
Gimp hilft hier: Menüleiste > Farben > Farbe zu Transparenz

Das geht so leider nicht. Gimp setzt nämlich dann die gewählte Farbe IMMER transparent, auch wenn sie das im Original gar nicht war.

mpmxyz hat Folgendes geschrieben:
P.S.: Wie kommst du eigentlich auf so ein Problem?

Das brauchte ich schon öfters mal, habe es da aber nicht gehabt. Sad
Im Moment möchte ich den Rahmen eines Ordners unter Windows Vista haben, und zwar mit Alphawert. An das Original komme ich da aber eben nicht ran.

Leider bin ich nicht allzu bewandert in BlitzBasic, ich könnte es versuchen, aber hätte vermutlich noch viele andere Probleme... Beispielsweise: Wie speichere ich das Ergebnis? Soweit ich weiß kann BlitzBasic nur bmp speichern, und das hat keine Transparenz.
AMD Athlon II 4x3,1GHz, 8GB Ram DDR3, ATI Radeon HD 6870, Win 7 64bit

ChaosCoder

BeitragSo, Jul 04, 2010 18:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier bitteschön - Musst jetzt nur BlitzMax haben oder dir die Demo davon holen. Einfach das Bild mit dem weißen hintergrund als 1.png speichern, das mit dem schwarzen als 2.png und beide in den Ordner mit dem Code packen - ausführen und es sollte eine original.png erzeugt werden.

Code: [AUSKLAPPEN]
SuperStrict

Local images:TPixmap[] = [LoadPixmap("1.png"),LoadPixmap("2.png")]

SavePixmapPNG(createOriginal(images),"original.png")

Function createOriginal:TPixmap(images:TPixmap[])
   Local result:TPixmap = CreatePixmap(images[0].width,images[0].height,PF_RGBA8888)
   result.ClearPixels(0)
   
   For Local x%=0 Until images[0].width
      For Local y%=0 Until images[0].height
         Local argb1% = images[0].ReadPixel(x,y)
         Local argb2% = images[1].ReadPixel(x,y)
         Local alpha% = 255-(getR(argb1)-getR(argb2))
         Local factor# = alpha/255.0
         If alpha = 0 result.WritePixel(x,y,ARGB(0,0,0,0)) Else result.WritePixel(x,y,ARGB(alpha,getR(argb2)/factor,getG(argb2)/factor,getB(argb2)/factor))
      Next
   Next
   Return result
End Function

Function ARGB%(a%,r%,g%,b%)
   Return a Shl 24 + r Shl 16 + g Shl 8 + b
End Function

Function getA%(argb%)
   Return (argb & $FF000000) Shr 24
End Function

Function getR%(argb%)
   Return (argb & $FF0000) Shr 16
End Function

Function getG%(argb%)
   Return (argb & $FF00) Shr 8
End Function

Function getB%(argb%)
   Return (argb & $FF) Shr 0
End Function

Viel Spaß damit!
Projekte: Geolaria | aNemy
Webseite: chaosspace.de

Nova

BeitragSo, Jul 04, 2010 18:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Wuheee, funktioniert super! Very Happy
Danke, vielen Dank! Smile

(Wobei, ich habe ein paar seltsame gelbe Punkte auf dem Bild. Vielleicht liegt das an dem Code, aber ich glaube eher, das liegt an den Originalbildern. An meinem Testbild hat dein Programm tadellos funktioniert. Smile)
AMD Athlon II 4x3,1GHz, 8GB Ram DDR3, ATI Radeon HD 6870, Win 7 64bit

Neue Antwort erstellen


Übersicht Sonstiges Smalltalk

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group