如何读取PowerPoint VSTO加载项中“图片工具”格式下可用的颜色设置(色调,重新着色)?

时间:2019-01-10 11:55:30

标签: c# vba vb.net vsto powerpoint

我正在使用VSTO加载项,该加载项在幻灯片中添加了图表图像。该图表来自WinForms DataVisualization.Charting库。出于性能方面的考虑,我们使用此图表代替PowerPoint本机图表。

我想获得图片格式设置,特别是用户在替换图像时应用的“颜色下拉”设置,以使它具有相同的感觉。

enter image description here

我尝试搜索它,甚至尝试通过查看Shape.PictureFormat属性以及当我们从功能区更改它时如何更改来找到它。

更多信息

借助“设置图片格式”边栏窗格,我能够看到我们在更改颜色下拉菜单中正在更新的内容。

Format Picture sidebar pane

例如,颜色饱和度更改了饱和度(侧边栏的“图片颜色”组中的第三个)。
色调会更改温度,但是 Recolor 不会更改任何内容,很遗憾,这是我要在更新图像时保留的颜色。

经过一些研究,我发现有一个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>

但仍在寻找如何在运行时获取此信息并使用它。

2 个答案:

答案 0 :(得分:1)

以下VBA代码演示了PowerPoint Shape的一些颜色格式化对象模型。要获得“饱和度”和“色调”,具体来说,PictureEffect.EffectParameter是必需的。 EffectParameter具有NameValue属性,可以反映使用了哪个饱和度和色温(读/写)。

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

答案 1 :(得分:0)

这是我用于其他可能需要的解决方案的人。

要复制图片格式,我们可以在源上使用Shape.PickUp,在目标上使用Shape.Apply复制大多数格式。

Shape.PickUp -复制指定形状的格式。使用Apply方法将复制的格式应用于其他形状。

Shape.Apply -适用于使用PickUp方法复制的指定形状格式。