![]() |
AW: PNG verschmelzen
Hab mal durchdacht, was bei der Verschmelzung zweier halbtransparenter Layer eigentlich passieren muss:
Code:
für die Berechnung das Alpha-Byte auf 0 bis 1 normalisieren: 0.255 -> 0..1 (0 = durchsichtig .. undurchsichtig)Betrachter +++++++++++++++++ Layer1: R1G1B1 ................. A1 ----------------- Layer2: R2G2B2 ................. A2 ----------------- Hintergrund _________________
Code:
A1 = A1 / 255
A2 = A2 / 255
Code:
Gleichungen umgeformt:
R = A1 * R1 + (1 - A1) * R2
G = A1 * G1 + (1 - A1) * G2 B = A1 * B1 + (1 - A1) * B2 A = 1 - ((1-A1) * (1-A2))
Code:
Alpha wieder als Byte darstellen:
R = A1 * (R1 - R2) + R2
G = A1 * (G1 - G2) + G2 B = A1 * (B1 - B2) + B2 A = A1 + A2 - A1 * A2
Code:
A = A * 255 // 0..1 -> 0..255
|
AW: PNG verschmelzen
Bei folgenden Grenzwerten kommt aber meiner Meinung nach nicht das Richtige raus:
A1 = 255, A2 = 0: Das obere Bild 1 ist undurchsichtig und überdeckt somit das untere Bild 2. Erwartet wird also (R1, G1, B1, 255), aber raus kommt (R1, G1, B1, 0). A1 = 0, A2 = 255: Das obere Bild 1 ist durchsichtig und lässt das untere Bild 2 vollständig durchscheinen. Der Hintergrund ist unsichtbar. Erwartet (R2, G2, B2, 255), aber raus kommt (R2, G2, B2, 0). In beiden Fällen sieht man also nur den Hintergrund. Wegen der Stetigkeit der Funktion vermute ich auch, dass die Zwischenwerte nicht (alle) richtig sind. |
AW: PNG verschmelzen
Stimmt, da denk ich noch mal drüber nach.
Hoffe jetzt ist alles richtig. ![]() |
AW: PNG verschmelzen
Zitat:
Sherlock |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz