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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top