处理打开的xml文档时,颜色可以将各种变换应用于基色以生成相对颜色。例如<a:satMod value="25000">
会将基色饱和度修改25%。有两个转换我能找到很少的信息,它们是:
<a:gamma>
文档说“此元素指定生成应用程序呈现的输出颜色应为输入颜色的sRGB伽玛偏移。”
和
<a:invGamma>
文档说“这个元素指定生成应用程序呈现的输出颜色应该是输入颜色的反向sRGB伽玛移位。”
我想了解我必须对基色进行什么计算才能使用这些变换进行变换。有人想出来了吗?
答案 0 :(得分:2)
呀。简单地说,
<a:gamma>
只是意味着获取sRGB值(0-1比例)并将其线性化(转换为线性RGB)。获取这些线性RGB值并将其保存为sRGB(如果需要,可将其转换为0-255范围)。<a:invGamma>
正好相反 - 采用线性RGB值(0-1比例)并对其进行去线性化(转换为sRGB)。取这些去线性化的RGB值并将它们保存为sRGB(如果需要,可将其转换为0-255范围)。那么什么是线性RGB?计算结果为here on Wikipedia's sRGB page。
这里也是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
传入的value
是0-1范围内的R,G,B分量,sRGB或线性RGB。您将收到相同的范围,0-1,根据您的需要,您可以转换为0-255范围来构建您的颜色。