3

在处理打开的 xml 文档时,颜色可以对基色进行各种转换以生成相对颜色。例如<a:satMod value="25000">,将基色饱和度修改 25%。有两种转换我能找到的信息很少,它们是:

<a:gamma> 

文档说“此元素指定生成应用程序呈现的输出颜色应该是输入颜色的 sRGB 伽马偏移。”

<a:invGamma>

文档说“此元素指定生成应用程序呈现的输出颜色应该是输入颜色的逆 sRGB 伽马偏移。”

我想了解我必须对基色进行什么计算才能使用这些转换中的任何一个对其进行转换。有没有人弄清楚这一点?

4

1 回答 1

2

是的。简单的说,

  • <a:gamma>只是意味着获取 sRGB 值(0-1 比例)并将其线性化(转换为线性 RGB)。将这些线性 RGB 值保存为 sRGB(如果需要,可以转换为 0-255 范围)。
  • <a:invGamma>相反 - 取线性 RGB 值(0-1 比例)并将其去线性化(转换为 sRGB)。获取那些去线性化的 RGB 值并将它们保存为 sRGB(如果需要,可以转换为 0-255 范围)。

那么什么是线性RGB?计算在 Wikipedia 的 sRGB 页面上

这里还有一个 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 范围来构建您的颜色。

于 2010-10-22T23:31:49.237 回答