OpenXML Schema Farbtransformationen - Anwendung und
Frage
Wenn ein offenes XML-Dokument bearbeiten, können Farben verschiedene Transformationen auf eine Grundfarbe aufgetragen haben eine relative Farbe zu erzeugen. Zum Beispiel <a:satMod value="25000">
würde die Grundfarben Sättigung um 25% ändern. Es gibt zwei Transformationen ich in der Lage gewesen, nur sehr wenig Informationen zu finden, auf und sie sind:
<a:gamma>
Die docs sagen: „Dieses Element gibt, dass die Ausgabefarbe durch die Erzeugungs Anwendung sollte die gerenderte sRGB gamma Verschiebung der Eingang Farbe sein.“
und
<a:invGamma>
Die docs sagen: „Dieses Element gibt, dass die Ausgabefarbe durch die Erzeugungs Anwendung gerendert sollte die inverse Gamma sRGB Verschiebung der Eingang Farbe sein.“
Ich möchte verstehen, was die Berechnung würde ich auf der Grundfarbe zu tun haben, es zu transformieren eine dieser Transformationen. Hat jemand diese herausgefunden?
Lösung
Ja. Einfach gesagt,
-
<a:gamma>
bedeutet einfach den sRGB-Wert zu nehmen (0-1-Skala) und linearisieren es (Umwandlung in lineare RGB). Nehmen Sie jene lineare RGB-Werte und speichern Sie sie als sRGB (und Konvertit Bereich 0-255, wenn Sie möchten). -
<a:invGamma>
ist das Gegenteil - nehmen Sie den linearen RGB-Wert (0-1-Skala) und delinearize es (Konvertit sRGB). Nehmen Sie diese delinearized RGB-Werte und speichern Sie sie als sRGB (und Konvertit Bereich 0-255, wenn Sie möchten).
Was ist also linear RGB? Die Berechnung ist hier auf Wikipedias sRGB .
Hier ist auch eine VBA-Version:
Public Function sRGB_to_linearRGB(value As Double)
If value < 0# Then
sRGB_to_linearRGB = 0#
Exit Function
End If
If value <= 0.04045 Then
sRGB_to_linearRGB = value / 12.92
Exit Function
End If
If value <= 1# Then
sRGB_to_linearRGB = ((value + 0.055) / 1.055) ^ 2.4
Exit Function
End If
sRGB_to_linearRGB = 1#
End Function
Public Function linearRGB_to_sRGB(value As Double)
If value < 0# Then
linearRGB_to_sRGB = 0#
Exit Function
End If
If value <= 0.0031308 Then
linearRGB_to_sRGB = value * 12.92
Exit Function
End If
If value < 1# Then
linearRGB_to_sRGB = 1.055 * (value ^ (1# / 2.4)) - 0.055
Exit Function
End If
linearRGB_to_sRGB = 1#
End Function
Die value
, dass Sie passieren in der R, G, B-Komponente in 0-1 Bereich, entweder sRGB oder lineare RGB. Sie werden den gleichen Bereich zurück erhalten, 0-1, und je nach Bedarf, können Sie dann auf 0-255 Bereich konvertieren Sie Ihre Farbe zu konstruieren.