• 2009-02-24

    解密PowerPoint动画之颜色篇 - [PPT动画探索]

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://www.blogbus.com/pptaddins-logs/35659572.html

    “颜色”是对象的一个重要属性,现实世界中颜色的变化是无穷的,而计算机不过是模拟现实世界,颜色变化是有限的,其精度受计算机字长的影响。“颜色”是一门大学科,它融艺术、审美、心理等于一体。
    在PowerPoint中,用红色通道、绿色通道和蓝色通道描述颜色。可以通过二种方式来指定颜色:
    (1)RGB函数,格式:RGB(r,g,b),r指定红色分量(其值范围0-255)、g指定绿色分量(其值范围0-255)、b指定蓝色分量(其值范围0-255),该函数返回一个单一纯色。
    (2)从 32 位调色板中指定一种颜色,其格式为 #rrggbb,其中 rr 是指定红色相对量的两位十六进制数,gg 指定绿色相对量,bb 指定蓝色相对量。
    颜色变化是PowerPoint动画中比较重要的部分,主要用于改变对象的填充色,线条色,字体色,项目符号色等。PowerPoint动画对象模型中提供了丰富的对象和属性,可以制造出非常丰富的颜色变化效果。

    详细情况见下表:

    对象或属性

    参数

    说明

    备注

    ColorEffect对象

    ByFromTo

    代表动画动作的一种颜色效果。

    简单的颜色变化

    不支持关键帧

    msoAnimColor

    FromTo

    更精细地控制对象颜色变化

    复杂的颜色变化

    支持关键帧

    msoAnimShapeFillBackColor

    FromTo

    改变背景填充色

    msoAnimShapeFillColor

    FromTo

    改变前景填充色

    msoAnimShapeLineColor

    FromTo

    改变线条色

    msoAnimShapeShadowColor

    FromTo

    改变阴影色

    msoAnimTextBulletColor

    FromTo

    改变文本项目符号色

    msoAnimTextFontColor

    FromTo

    改变字体色

    下面我们来做个红色滚动条动画。这个滚动条动画运用“属性”动作中的“msoAnimColor”属性,设置了三个关键点来表现颜色的变化。三个关键点的时间分配和值设置情况见下表:

    关键帧

    时间

    1

    00

    26367v

    2

    02

    6661119

    3

    10

    10996735

    动画效果图如下:

    源文件下载http://www.brsbox.com/filebox/down/fc/bdc0a8f4d755b7a2ab12ccb97602211b

    分享到:

    评论

  • 博客写的不错啊
  • net里面有的,VB6里面有没有?
    以为少少的VB6的经验,PPT里没有公开的对象模型,从VB6里面也没法访问啊。
    回复hxhgxy说:
    用.net来写宿主,用VB6访问就可以了。
    2009-08-05 18:14:25
  • 天,Net里面控制PPT?这个机密如何被你发现的?
    你这两个软件都是用VBNet写的吧?

    另外,我在Excelhome的博客也重新开张了,欢迎光临!
    http://blog.excelhome.net/user1/hxhgxy/index.html

    如果你觉得方便的话,建议你搬家到那里,因为那里容量大,站长和我比较熟,再大的容量应该也可以设置。
    回复hxhgxy说:
    两个工具混合了VB6和VC6,.net的开发平台对于开发office插件非常有优势,但是部署安装却非常麻烦,所以最好方法是在.net下开发控件,在VB6下调用。现在这个网址逐渐被朋友们接受,目前空间还够用,等将来不行了再联系你搬家吧,先致上感谢。
    2009-08-05 18:20:24
  • 你是讲shape的patterned方法?动画时设置填充样式?
    回复hxhgxy说:
    不是,它应该是msoAnimShapeFillType,只是在PPT的对象模型没有公开,要想应用这个东西也可以通过.net中的“ Package ”来访问并修改其值。这样的填充类型大概有:solid,gradient,gradientradial几种,效果非常好。
    2009-08-04 21:02:28
  • Sub CustomAnim()
    Dim slTemp As Slide
    Dim shpTemp As Shape
    Dim effNew As Effect
    Dim bhvEff As AnimationBehavior
    Dim aptNewPoint As AnimationPoint

    Set slTemp = Application.ActivePresentation.Slides(2)
    Set shpTemp = slTemp.Shapes("shpTest")
    Set effNew = slTemp.TimeLine.MainSequence.AddEffect _
    (Shape:=shpTemp, _
    effectid:=msoAnimEffectCustom)
    Set bhvEff = effNew.Behaviors.Add(msoAnimTypeProperty)
    bhvEff.Timing.Duration = 1
    With bhvEff.PropertyEffect
    .Property = msoAnimColor
    ' .From = RGB(253, 234, 218)
    ' .To = RGB(228, 108, 10)
    Set aptNewPoint = .Points.Add
    With aptNewPoint
    .Time = 0
    .Value = RGB(253, 234, 218)
    End With
    Set aptNewPoint = .Points.Add
    With aptNewPoint
    .Time = 0.2
    .Value = RGB(250, 192, 144)
    End With
    Set aptNewPoint = .Points.Add
    With aptNewPoint
    .Time = 1
    .Value = RGB(228, 108, 10)
    End With
    End With
    Set slTemp = Nothing
    Set shpTemp = Nothing
    Set effNew = Nothing
    Set bhvEff = Nothing
    Set aptNewPoint = Nothing
    End Sub
    这是我写的代码,动画效果非预期所要。

    下面的代码也是我写的,试图分析你示例中最后一个图形的动画。我发现竟然有两个Behavior,第二个才是颜色动画。第一个未知。老乡,能否告知第一个behavior是什么?

    Sub getAnimInfo()
    Dim bhvTemp As AnimationBehavior
    Dim effTemp As Effect
    Dim ptTemp As AnimationPoint
    Dim iPtCount As Integer
    Dim i As Integer
    Dim shpTemp As Shape

    Set shpTemp = ActivePresentation.Slides(1).Shapes("Rectangle 72")
    ' MsgBox ActivePresentation.Name
    Set effTemp = ActivePresentation.Slides(1). _
    TimeLine.MainSequence. _
    FindFirstAnimationFor(shpTemp)
    MsgBox effTemp.Shape.Name
    MsgBox effTemp.Behaviors.Count
    Set bhvTemp = effTemp.Behaviors(2)
    iPtCount = bhvTemp.PropertyEffect.Points.Count
    For i = 1 To iPtCount
    Set ptTemp = bhvTemp.PropertyEffect.Points(i)
    With ptTemp
    MsgBox .Time & "-" & .Value
    End With
    Next i
    End Sub
    回复hxhgxy说:
    PPT的动画对象模型还存在一些缺陷,有时候代码明明没有任何问题,可是结果却出错,这在我开发PowerPoint动画库扩展和PPT动画管理器时是经常遇到的,所以有时不得不采取一些技术手段变通来解决。
    那个未知,其实是形状的填充样式,这在PPT中是不公开的,没有办法通过正常的方式来访问。
    2009-08-03 21:38:21
  • 你应该写本书,应该能将国内的PPT水平提前十年,呵呵!
  • 用预设的更改填充色也可以模拟这样的效果,按说肉眼应该看不出区别来吧。

    用代码生成的当然更精确,更省力咯。

    老乡,能否以此示例源码讲解更详细一些?

    http://z11.invisionfree.com/pptheaven/index.php?showtopic=1360 这篇帖子不会是你发表的吧?

    http://www.awesomebackgrounds.com/ss-fireworks.htm 这里的烟火效果是我见过最逼真的,老乡是否有兴趣模仿出来?
    回复Tiger说:
    用代码来控制颜色当然要比PPT中的自定义动画工具要更好,而且还可以突破它的限制,如:更改“组合”的颜色甚至某些矢量图片的颜色等,有时会发现原来PPT中藏着很多未知的东西。
    pptheaven上的那个贴子是我发的,介绍了一个烟花效果,到目前为止那个效果依然是PPT中最逼真的,现在很少上那里去了,因为感觉它一年不如一年。
    awesomebackgrounds上的那个烟花是一个Gif,到目前为止用PPT本身的动画功能还难以达到那样的效果。除非也采用Gif的技术来做。
    2009-08-02 18:59:31
  • 呵呵 我更喜欢这个博客的风格
  • 呵呵 外行看不懂,厉害
  • 看起来很高深。。。