OpenXML transformaciones de color esquema - aplicar y
Pregunta
Al procesar un documento XML abierto, los colores pueden tener diversas transformaciones aplicadas a un color de base para generar un color relativa. Por ejemplo <a:satMod value="25000">
modificaría la saturación de los colores base en un 25%. Hay dos transformadas he podido encontrar muy poca información sobre y son:
<a:gamma>
Los docs dicen "Este elemento especifica que el color de salida emitida por la aplicación de generación debe ser el cambio sRGB gamma del color de entrada."
y
<a:invGamma>
Los docs dicen "Este elemento especifica que el color de salida emitida por la aplicación de generación debe ser el inverso sRGB cambio gamma del color de entrada."
Me gustaría entender lo que el cálculo tendría que hacer en el color base para transformarla usando cualquiera de estas transformaciones. nadie ha dado cuenta de esto?
Solución
Sí. En pocas palabras,
-
<a:gamma>
significa simplemente tomar el valor sRGB (0-1 escala) y linealizarlo (convertido a lineal RGB). Toma los valores RGB lineal y guardarlos como sRGB (y convertido al 0-255 rango si lo desea). -
<a:invGamma>
es lo contrario - tomar el valor RGB lineal (0-1 escala) y deslinealizar que (Convertir a sRGB). Tomar esos valores RGB característica lineal y guardarlos como sRGB (y convertido al 0-255 rango si lo desea).
Entonces, ¿qué es lineal RGB? El cálculo es aquí en la página de Wikipedia sRGB .
Aquí hay también una versión de VBA:
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
El value
que se pasa en es la R, G, el componente B en 0-1 gama, ya sea sRGB o lineal RGB. Usted recibirá el mismo rango de vuelta, 0-1, y en función de sus necesidades, a continuación, puede convertirse al 0-255 gama de construir su color.