Ich habe ein unerwartetes Verhalten mit dem Mischmodus „ Farbe brennen “ in Adobe Photoshop CS 5 (und CS 6).
Mein Verständnis des Mischmodus ist das folgende ( https://helpx.adobe.com/photoshop/using/blending-modes.html ):
Color Burn : Betrachtet die Farbinformationen in jedem Kanal und verdunkelt die Grundfarbe, um die Mischfarbe widerzuspiegeln, indem der Kontrast zwischen den beiden erhöht wird. Das Mischen mit Weiß ergibt keine Änderung.
Ich habe folgende Konstellation:
Mein erwartetes Ergebnis ist eine vollständig schwarze Farbe (#000000). Mein tatsächliches Ergebnis ist eine vollständig weiße Farbe (#FFFFFF).
Wenn ich jedoch die untere Ebene nur geringfügig ändere, zB auf einen Wert von fast Weiß wie #FEFFFF (254, 255, 255 in RGB), erhalte ich das erwartete Ergebnis eines vollständig ausgesparten Kanals (#00FFFF).
Wenn in der Dokumentation steht blending with white produces no change
, erwarte ich, dass damit die oberste Ebene gemeint ist (dh die Mischebene)?
Warum ist dieser Mischmodus nicht "aktiviert", wenn ein Kanal in der Basisebene vollständig weiß ist?
Das folgende Bild zeigt die beispielhaften Ergebnisse (in CS5):
HINWEIS: Interessanterweise tritt das gleiche Problem beim Farbabwedeln auf (wenn Sie alle Referenzen von Weiß zu Schwarz und umgekehrt umkehren). Immer wenn ein Kanal in der Farbabwedel-Basisebene etwas über 0 liegt, wird der Mischmodus aktiviert.
Dies passiert auch, wenn der Top-Layer von Null verschieden ist, zB #040404.
Gemäß den verfügbaren Algorithmen, die ich mir online angesehen habe, ist der Eckfall nur dann gegeben, wenn die oberste Schicht vollständig schwarz ist, aber diese Algorithmen verwenden dann als Ergebnis die oberste Schicht (und nicht die unterste Schicht).
Beispiel:
if b = 0 then
result := 0
else begin
c := 255 - (((255-a) SHL 8) DIV b);
if c < 0 then result := 0 else result := c;
end;
Wobei a die Basisschicht (untere Schicht) und b die Mischschicht (obere Schicht) ist.
(Siehe https://stackoverflow.com/questions/5919663/how-does-photoshop-blend-two-images-together oder http://www.pegtop.net/delphi/articles/blendmodes/burn.htm )
Da das gleiche Verhalten auftritt, wenn die oberste Ebene von Null abweicht, scheint PS einen Sonderfall für einen Basiskanalwert von 255 zu haben. Dies ist höchstwahrscheinlich auf eine willkürliche Entscheidung von Adobe zurückzuführen, die sich nicht in anderen Algorithmen widerspiegelt.
Die Division durch Null ist nicht definiert. Das Image intakt zu lassen, ist die einzig mögliche Lösung. Siehe Wikipedia zu Mischmodi. Das ist in einigen Fällen etwas problematisch, aber die Verwendung von reinem Schwarzbrand ist sowieso nicht wirklich sinnvoll. Mehrfach verwenden.
Ausweichen ist rückwärts brennen. Vermutlich wollten sie also, dass es die gleichen Eckenbeschränkungen hat.
Anmerkungen zum Erläuterungsformular : Die Auswahl ist willkürlich, da die Division durch Null nicht definiert ist.
Es ist im Grunde ein Implementierungsdetail.
Basierend auf Tests scheint Adobe dem normalen Algorithmus [1] für das Einbrennen von Farben eine zusätzliche Bedingung hinzugefügt zu haben.
Der normale Algorithmus ist:
if b = 0 then
result := 0
else begin
c := 255 - (((255-a) SHL 8) DIV b);
if c < 0 then result := 0 else result := c;
end;
wobei a die obere Schicht (Mischschicht) und b die untere Schicht (die Basisschicht) ist.
Die Implementierung von Adobe scheint jedoch zu sein:
// Start of extra test
if a = 255 then
result := 255
// End of extra test
else if b = 0 then
result := 0
else begin
c := 255 - (((255-a) SHL 8) DIV b);
if c < 0 then result := 0 else result := c;
end;
Beachten Sie den zusätzlichen Test am Anfang. Dies wird wahrscheinlich hinzugefügt, da dies die konsistentesten Ergebnisse liefert, wenn die Basisschicht vollständig weiß ist. Alle anderen oberen Schichten als vollständig schwarz geben Weiß zurück, und deshalb haben sie sich entschieden, Weiß auch dann zurückzugeben, wenn die oberste Schicht vollständig schwarz ist (wobei es implementierungsspezifisch ist, was zurückgegeben werden soll).
[1] = http://www.pegtop.net/delphi/articles/blendmodes/burn.htm
joojaa