dotnet OpenXML 颜色变换

时间:2022-07-24
本文章向大家介绍dotnet OpenXML 颜色变换,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

颜色变换是对基础颜色的相关属性的修改。 例如,透明度是与颜色相关的属性。 颜色转换被指定为任何颜色模型标签的子标签,可以在任何颜色加上颜色变换

大概的写法如下

<a:solidFill>
   <a:srgbClr val="00B050">
        <a:alpha val="51000"/>
   </a:srgbClr>
</a:solidFill> 

上面代码表示一个 使用 Solid Color Brush 的填充(a:solidFill) 颜色是 RGB 颜色,基础值是 #00B050 在此基础上加上 alpha 通道,值是 EMU 单位的

a:alpha 就是颜色变换的内容,除了 a:alpha 之后,还有很多其他的颜色变换

  • tint:产生较浅版本的输入颜色。 如 10%的色彩是输入颜色的10%,再加上90%的白色。
  • shade:产生其输入颜色的较暗版本。如 10%的阴影是输入颜色的10%加上90%的黑色。
  • comp:产生其输入颜色的补码。例如,红色的补码是绿色。
  • inv:产生其输入颜色的倒数。例如,红色(1,0,0)的倒数是青色(0,1,1)。
  • gray:考虑到红色,绿色和蓝色原色的相对强度,产生其输入颜色的灰度。
  • alpha:产生具有指定不透明度的输入颜色,但其颜色不变。
  • alphaOff:产生其输入颜色或多或少不透明的版本。 Alpha偏移量永远不会使Alpha值超过100%或降低至0%以下;也就是说,转换结果会将alpha固定为[0%,100%]的范围。 如 10%的alpha偏移将50%的不透明度增加到60%。如 -10%的alpha偏移将50%的不透明度降低到40%。
  • alphaMod:产生其输入颜色或多或少的不透明版本。 alpha调制永远不会将alpha增加到100%以上。如 200%的alpha调制使输入颜色的透明度是以前的两倍。 50%的alpha调制使输入颜色的透明度是以前的一半。
  • hue:产生具有指定色相但饱和度和亮度不变的输入颜色。
  • hueOff:改变其色调但不改变其饱和度和亮度,以产生输入颜色。
  • hueMod:产生输入色,其色相由给定百分比调制。
  • sat:以指定的饱和度产生输入颜色,但其色相和亮度不变。通常,饱和度值在[0%,100%]范围内。
  • satOff:产生具有饱和度偏移但色相和亮度不变的输入颜色。
  • satMod:产生输入颜色,其饱和度由给定的百分比调制。 如 50%饱和度调制可将饱和度降低一半。如 200%的饱和度调制会使饱和度加倍。
  • lum:以指定的亮度产生输入颜色,但其色相和饱和度不变。通常,亮度值在[0%,100%]范围内。
  • lumOff:产生输入颜色,其亮度发生变化,但其色相和饱和度不变。
  • lumMod:产生输入颜色,其亮度由给定百分比调制。如 50%的亮度调制将亮度降低一半。如 200%的亮度调制使亮度加倍。单位是千倍百分比
  • red:使用指定的红色分量产生输入颜色,但绿色和蓝色分量不变。
  • redOff:产生输入颜色,其中红色分量发生偏移,而绿色和蓝色分量保持不变。
  • redMod:产生输入颜色,其红色分量由给定的百分比调制。如 50%的红色调制将红色分量减少一半。如 200%的红色调制会使红色分量加倍。
  • green:产生具有指定绿色成分的输入颜色,但红色和蓝色成分不变。
  • greenOff:产生输入颜色,其中绿色分量发生偏移,但红色和蓝色分量保持不变。
  • greenMod:产生输入颜色,其绿色分量由给定的百分比调制。如 50%的绿色调制将绿色分量减少一半。如 200%的绿色调制将绿色分量加倍。
  • blue:产生具有指定蓝色成分的输入颜色,但其红色和绿色成分不变。
  • blueOff:产生输入颜色,其中蓝色分量已移动,但红色和绿色分量未更改。
  • blueMod:产生输入颜色,其蓝色分量由给定的百分比调制。如 50%的蓝色调制可将蓝色分量减少一半。如 200%的蓝色调制使蓝色分量加倍。
  • gamma:产生其输入颜色的sRGB gamma偏移。
  • invGamma:产生其输入颜色的sRGB逆γ偏移。

详细请看 ECMA 376 的 L.4.8.3 文档和 20.1.2.3 Colors 文档

上面的所有标记了百分比的值的单位都是千倍百分比,也就是在 OpenXML 文档里写的值如下面代码,这里的 lumMod 就是表示百分比

<a:schemeClr val="tx1">
    <a:lumMod val="65000" />
</a:schemeClr>

这里的 65000 就是千倍百分比,每 1000 表示百分之一,关于单位请看Office Open XML 的测量单位

更多请看 Office 使用 OpenXML SDK 解析文档博客目录