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?

War es hilfreich?

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.

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