【问题标题】:OpenXML scheme color transformations - applying <a:gamma> and <a:invgamma>OpenXML 方案颜色转换 - 应用 <a:gamma> 和 <a:invgamma>
【发布时间】:2010-10-25 01:40:20
【问题描述】:

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

<a:gamma> 

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

<a:invGamma>

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

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

【问题讨论】:

    标签: c# openxml drawingml


    【解决方案1】:

    是的。简单地说,

    • &lt;a:gamma&gt; 仅表示获取 sRGB 值(0-1 比例)并将其线性化(转换为线性 RGB)。将这些线性 RGB 值保存为 sRGB(如果需要,可以转换为 0-255 范围)。
    • &lt;a:invGamma&gt; 则相反——取线性 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 范围来构建您的颜色。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-09
      • 2022-11-13
      相关资源
      最近更新 更多