Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi PNG verschmelzen (https://www.delphipraxis.net/213174-png-verschmelzen.html)

Blup 22. Jun 2023 12:49

AW: PNG verschmelzen
 
Hab mal durchdacht, was bei der Verschmelzung zweier halbtransparenter Layer eigentlich passieren muss:
Code:
           
Betrachter     +++++++++++++++++

Layer1: R1G1B1 .................
        A1     -----------------

Layer2: R2G2B2 .................
        A2     -----------------

Hintergrund    _________________
für die Berechnung das Alpha-Byte auf 0 bis 1 normalisieren: 0.255 -> 0..1 (0 = durchsichtig .. undurchsichtig)
Code:
A1 = A1 / 255
A2 = A2 / 255
Code:
R = A1 * R1 + (1 - A1) * R2
G = A1 * G1 + (1 - A1) * G2
B = A1 * B1 + (1 - A1) * B2
A = 1 - ((1-A1) * (1-A2))
Gleichungen umgeformt:
Code:
R = A1 * (R1 - R2) + R2
G = A1 * (G1 - G2) + G2
B = A1 * (B1 - B2) + B2
A = A1 + A2 - A1 * A2
Alpha wieder als Byte darstellen:
Code:
A = A * 255 // 0..1 -> 0..255

Uwe Raabe 22. Jun 2023 14:28

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.

Blup 22. Jun 2023 14:52

AW: PNG verschmelzen
 
Stimmt, da denk ich noch mal drüber nach.
Hoffe jetzt ist alles richtig.
https://www.math3d.org/bRXZ89Rfj

Sherlock 22. Jun 2023 16:07

AW: PNG verschmelzen
 
Zitat:

Zitat von creehawk (Beitrag 1523254)
Auf dem Bildschirm sieht es jedenfalls genau richtig aus.

In dem Fall könntest Du auch versuchen, einen Screenshot von dem Rectangle Deines Images machen.

Sherlock


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:34 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz