如何读取 PowerPoint VSTO 插件中 "Picture Tools" 格式下可用的颜色设置(色调、重新着色)?
How to read the color settings (Color Tone, Recolor) available under "Picture Tools" Format in the PowerPoint VSTO Addin?
我正在开发一个 VSTO 加载项,它在 slide.The 图表中添加图表图像来自 WinForms DataVisualization.Charting 库。出于性能原因,我们使用这个代替 PowerPoint 原生图表。
我想获得图片格式设置,特别是用户在替换图像时应用的颜色下拉设置,以使其感觉相同。
我已经尝试搜索它,甚至试图通过查看 Shape.PictureFormat 属性 以及当我们从功能区更改时它如何变化来找到它。
更多信息
在“设置图片格式”侧边栏窗格的帮助下,当我们更改颜色下拉列表中的某些内容时,我能够看到正在更新的内容。
例如,色彩饱和度 更改饱和度(边栏图片颜色组中的第三个)。
Color Tone 改变了 Temperature 但 Recolor 没有改变任何东西,不幸的是这是我想在更新图像时保留的那个。
经过一番研究,我发现 Recolor method exists 但它仅适用于 Office Publisher 应用程序。在深入研究演示文稿文件后,我发现 slide.xml 文件中的图像标签内有一个附加标签。
<a:duotone>
<a:prstClr val="black"/>
<a:schemeClr val="accent3">
<a:tint val="45000"/>
<a:satMod val="400000"/>
</a:schemeClr>
</a:duotone>
但仍在寻找如何在 运行 时间内获取此信息并使用它。
以下 VBA 代码演示了 PowerPoint 形状的一些颜色格式化对象模型。要获得 Saturation 和 ColorTone,具体来说,需要 PictureEffect.EffectParameter
。 EffectParameter
具有 Name
和 Value
属性,反映了使用的饱和度和色温 (read/write)。
Sub ShapeColorFormatting()
Dim PP As Presentation
Dim s As Slide
Dim shp As Shape
Dim b As Double, c As Long 'MsoPictureColorType
Dim lPE As Long, lEp As Long, p As Long, e As Long
Dim pe As PictureEffect, ep As EffectParameter
Set PP = ActivePresentation
Set s = PP.Slides(1)
Set shp = s.Shapes(s.Shapes.Count)
Debug.Print shp.Name
b = shp.PictureFormat.Brightness
c = shp.PictureFormat.ColorType
lPE = shp.Fill.PictureEffects.Count
For p = 1 To lPE
Set pe = shp.Fill.PictureEffects(p)
For e = 1 To pe.EffectParameters.Count
Set ep = pe.EffectParameters(e)
Debug.Print ep.Name, ep.Value
Next e
Next p
Debug.Print shp.Fill.ForeColor.TintAndShade, _
shp.Fill.BackColor.ObjectThemeColor, _
shp.Fill.ForeColor.ObjectThemeColor
End Sub
这是我为可能需要它的其他人使用的解决方案。
要复制图片格式,我们可以在目标上使用 Shape.PickUp on the source and Shape.Apply 来复制大部分格式。
Shape.PickUp - 复制指定形状的格式。使用 Apply 方法将复制的格式应用到另一个形状。
Shape.Apply - 适用于使用 PickUp 方法复制的指定形状格式。
我正在开发一个 VSTO 加载项,它在 slide.The 图表中添加图表图像来自 WinForms DataVisualization.Charting 库。出于性能原因,我们使用这个代替 PowerPoint 原生图表。
我想获得图片格式设置,特别是用户在替换图像时应用的颜色下拉设置,以使其感觉相同。
我已经尝试搜索它,甚至试图通过查看 Shape.PictureFormat 属性 以及当我们从功能区更改时它如何变化来找到它。
更多信息
在“设置图片格式”侧边栏窗格的帮助下,当我们更改颜色下拉列表中的某些内容时,我能够看到正在更新的内容。
例如,色彩饱和度 更改饱和度(边栏图片颜色组中的第三个)。
Color Tone 改变了 Temperature 但 Recolor 没有改变任何东西,不幸的是这是我想在更新图像时保留的那个。
经过一番研究,我发现 Recolor method exists 但它仅适用于 Office Publisher 应用程序。在深入研究演示文稿文件后,我发现 slide.xml 文件中的图像标签内有一个附加标签。
<a:duotone>
<a:prstClr val="black"/>
<a:schemeClr val="accent3">
<a:tint val="45000"/>
<a:satMod val="400000"/>
</a:schemeClr>
</a:duotone>
但仍在寻找如何在 运行 时间内获取此信息并使用它。
以下 VBA 代码演示了 PowerPoint 形状的一些颜色格式化对象模型。要获得 Saturation 和 ColorTone,具体来说,需要 PictureEffect.EffectParameter
。 EffectParameter
具有 Name
和 Value
属性,反映了使用的饱和度和色温 (read/write)。
Sub ShapeColorFormatting()
Dim PP As Presentation
Dim s As Slide
Dim shp As Shape
Dim b As Double, c As Long 'MsoPictureColorType
Dim lPE As Long, lEp As Long, p As Long, e As Long
Dim pe As PictureEffect, ep As EffectParameter
Set PP = ActivePresentation
Set s = PP.Slides(1)
Set shp = s.Shapes(s.Shapes.Count)
Debug.Print shp.Name
b = shp.PictureFormat.Brightness
c = shp.PictureFormat.ColorType
lPE = shp.Fill.PictureEffects.Count
For p = 1 To lPE
Set pe = shp.Fill.PictureEffects(p)
For e = 1 To pe.EffectParameters.Count
Set ep = pe.EffectParameters(e)
Debug.Print ep.Name, ep.Value
Next e
Next p
Debug.Print shp.Fill.ForeColor.TintAndShade, _
shp.Fill.BackColor.ObjectThemeColor, _
shp.Fill.ForeColor.ObjectThemeColor
End Sub
这是我为可能需要它的其他人使用的解决方案。
要复制图片格式,我们可以在目标上使用 Shape.PickUp on the source and Shape.Apply 来复制大部分格式。
Shape.PickUp - 复制指定形状的格式。使用 Apply 方法将复制的格式应用到另一个形状。
Shape.Apply - 适用于使用 PickUp 方法复制的指定形状格式。