我正在开发一个VSTO加载项,它在幻灯片中添加了一个图表图像。该图表来自WinForms DataVisualization.Charting库。出于性能原因,我们使用此代替PowerPoint本机图表。
我想获得图片格式设置,特别是用户在更换图像时应用的颜色下拉设置,使其感觉相同。
我试过搜索它,甚至试图通过查看Shape.PictureFormat属性以及当我们从功能区更改时它如何变化来找到它。
更多信息
在格式图片侧边栏窗格的帮助下,当我们在颜色下拉菜单中更改内容时,我能够看到正在更新的内容。
例如,颜色饱和度会更改饱和度(侧边栏的“图片颜色”组中的第三个)。 色调会改变温度,但重新着色不会改变任何东西,不幸的是,这是我想要在更新图像时保留的那个。
经过一些研究后,我发现Recolor method exists但它只适用于Office Publisher应用程序。在深入挖掘演示文件文件后,我发现在slide.xml文件中的image标签中有一个额外的标签。
<a:duotone>
<a:prstClr val="black"/>
<a:schemeClr val="accent3">
<a:tint val="45000"/>
<a:satMod val="400000"/>
</a:schemeClr>
</a:duotone>
但仍在寻找如何在运行时获取此信息并使用它。
以下VBA代码演示了PowerPoint Shape的一些颜色格式化对象模型。要获得饱和度和ColorTone,特别需要PictureEffect.EffectParameter
。 EffectParameter
具有Name
和Value
属性,可反映使用饱和度和色温(读/写)。
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,在目标上使用Shape.Apply来复制大部分格式。
Shape.PickUp - 复制指定形状的格式。使用Apply方法将复制的格式应用于其他形状。
Shape.Apply - 适用于使用PickUp方法复制的指定形状格式。