Programm um Transparenz wiederherzustellen
Übersicht

![]() |
NovaBetreff: Programm um Transparenz wiederherzustellen |
![]() Antworten mit Zitat ![]() |
---|---|---|
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: ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Gimp hilft hier: Menüleiste > Farben > Farbe zu Transparenz
BB3D kann das auch, mit dem Texturfilter 2 oder 4 |
||
Starfare: Worklog, Website (download) |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. ![]() mfG mpmxyz P.S.: Wie kommst du eigentlich auf so ein Problem? |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
Nova |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wuheee, funktioniert super! ![]() Danke, vielen Dank! ![]() (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. ![]() |
||
AMD Athlon II 4x3,1GHz, 8GB Ram DDR3, ATI Radeon HD 6870, Win 7 64bit |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group