Frage

Ich spiele mit einigem manuellen (Walk-the-Pixel) Bildverarbeitung, und ich bin mit dem Standard „Overlay“ Mischung neu zu erstellen. Ich bin bei den „Photoshop math“ Makros suche hier:

http://www.nathanm.com/photoshop-blending-math/ ( Sehen Sie hier auch für besser lesbare Version Overlay)

Die beiden Quellbilder sind in ziemlich Standard RGBA (je 8 Bit) -Format, als das Ziel. Wenn beiden Bilder vollständig opak sind (alpha 1,0 ist), wird das Ergebnis korrekt gemischt, wie erwartet:

Aber wenn meine „Mischung“ Schicht (die obere Bild) Transparenz in ihm, ich bin ein wenig flummoxed als , wie man Faktor, dass Alpha in die Misch Gleichung richtig. Ich erwarte, dass es so arbeiten, dass transparenter Pixel in der Mischungsschicht auf dem Ergebnis keinen Einfluss hat, opake Pixel in der Mischungsschicht tun, um die Overlay-Mischung als normal, und halbtransparenten Mischungsschicht Pixel haben einigen skalierte Effekt auf dem Ergebnis.

Kann mir jemand erklären die Mischung Gleichungen oder das Konzept dieses hinter tun?

Bonuspunkte , wenn Sie mir helfen können, tut es so, dass das resultierende Bild korrekt Premultiplied alpha (die nur ins Spiel kommt für Pixel, die nicht deckend in beiden Schichten sind, glaube ich.)

Danke!

// factor in blendLayerA, (1-blendLayerA) somehow?
resultR = ChannelBlend_Overlay(baseLayerR, blendLayerR); 
resultG = ChannelBlend_Overlay(baseLayerG, blendLayerG);
resultB = ChannelBlend_Overlay(baseLayerB, blendLayerB);
resultA = 1.0; // also, what should this be??
War es hilfreich?

Lösung

Nur eine Vermutung, aber ich würde versuchen

resultA = 1 - (1-baseAlpha) * (1-blendAlpha)

Andere Tipps

Nach dem Mischen der Grundfarbe und die Füllfarbe, mischte, um die ursprüngliche Grundfarbe und die Farbe aus dem Mischen resultierende Verwendung der alpha der Füllfarbe:

vec4 baseColor = ...;
vec4 blendColor = ...;
vec4 blendedColor = blend(baseColor, blendColor);
vec4 fragmentColor = (1.0 - blendColor.a) * baseColor + blendColor.a * blendedColor;

I verwenden, um dies für „overlay“ Vermischen eine opake Grundfarbe und Textur einer Mischung, die eine Menge von (semi-) transparenten Pixeln hat.

Ich war genau mit diesem Thema zu experimentieren, bis ich herausgefunden, dass das Beste ist, die Basis und die Mischungsschicht sowohl mit geraden alpha, dann premultiply nur das Ergebnis mit der Basis alpha.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top