c#动画设计初探(CompositionTarget与DispatcherTimer)

     最近需要做个图像采集的工作,其中一个步骤是需要将从摄像机采集的图像播放出来,由于摄像机采集的是一帧帧的图片,而播放的时候需要对播放速度进行控制,因此我考虑将图片放在一个缓冲区中,然后从缓存区中读取后进行播放。因此首先要做的就是如何将一帧帧的图片播放出来,

      通过几天WPF学习,发现可以通过改变image控件的Imagesource或者改变 imageBrush.ImageSource,然后改变Rectangle等的Fill属性,来实现图片的切换。但是做了一个例子发现不是那回事,我在一个循环中不断改变ImageSource值却发现只有最后一帧放出来了,其它帧根本没有显示。并且加入Thread.sleep()让线程等待一段时间也不行。

      再研究发现一些例子中都用了CompositionTarget这个类,但是MSDN中帮助让我看一头雾水,“使用 CompositionTarget 对象,可以基于每个帧回调来创建自定义动画。 CompositionTarget是一个静态类,表示您的应用程序要在其上进行绘制的显示图面。 每次绘制应用程序的场景时,都会引发 Rendering 事件。 呈现帧速率是指每秒绘制场景的次数。”弄了好半天才搞明白,其实说白了,就是程序窗口会按照一定的频率进行刷新,在这个刷新时会触发 Rendering 这个事件,在这个事件中编写你的动画过程(例如改变ImageSource)就可以了。真怀念VB6的帮助,详尽易懂,当时市面的书籍基本上照抄,无出其右。现在的帮助搞的我都怀疑自己是不是中国人,怎么中文搞得比英文还难看懂。

      如果用CompositionTarget,可以用二种方法改变刷新频率(抄来的,没试过,不保证可用。以后有机会再试)。

      方法一:

 

方法二:

      最后我没有用CompositionTarget,而是用的定时器DispatcherTimer,来实现图片连续播放。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值