Chinaunix首页 | 论坛 | 博客
  • 博客访问: 495048
  • 博文数量: 96
  • 博客积分: 6046
  • 博客等级: 准将
  • 技术积分: 908
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-07 22:40
文章分类

全部博文(96)

文章存档

2009年(12)

2008年(18)

2007年(45)

2006年(21)

我的朋友

分类:

2007-06-08 19:42:36

 
2006-10-25 08:00 作者: longway 出处: 天极开发 责任编辑:
  
  现在的图像越来越花巧了,有浮雕、马赛克、相框等特效,看得人眼花缭乱。本来图像特效没什么稀奇的,在PhotoShop等图像处理软件中我们早已见得多了,不过用在视频上就令人感觉有点神奇。我一直都想拥有这些效果,但我的摄像头是很早就买到的,没福气奢望驱动程序给它带来的全新精彩。刚好我学习DirectShow有一段时间了,既为了挑战自己(我从未写过令自己感到满意的程序),也为了检验学习成果,我就下了决心用DirectShow实现这些效果。几经努力,终于有了一些成绩,我完成了其中一些效果,并发现程序可以用在DirectShow支持的影音文件上,又自己把它应用到D3D中去,感觉还不错。

  先看看效果吧,以激励斗志。我是对着摄像头广告中的效果图来做程序的,我怕编程的热情像以前那样很快冷却,只留下一堆乱糟糟的代码,我需要它来不断兴奋被代码搞得昏头转向的大脑。


(图一:几种效果) (图二:D3D中的摄像展示)

  编程的思路是这样的:写一个DirectShow的VideoRenderer Filter用于实时获取图像,之后在用DirectShow连接并使用摄像头、播放视频时用上该Filter,这样就可以实时处理视频的图片并进行显示了。

  由于要用到DirectShow,我想在这里说一些关于DirectShow的初级知识,初学或没学过DirectShow的朋友就请耐下性子来听我这个初学者罗嗦一阵子(要学DirectShow的朋友可以看天极的DirectShow相关文章,介绍很详细)。

  在新版的DX9 SDK中已看不到DirectShow的影子了(DirectShow发展到了尽头?),不过DirectShow还可用,而且相当有用。听说VC.net自带有DX8 SDK开发文件,但我仍希望您能找到DX8 SDK和VC6。DX8 SDK帮助文件对DirectShow详细的说明和SDK丰富的DirectShow例子对DirectShow开发是大有裨益的。我在开发Filter过程中发现VC.net不能编译通过,出现“InterLockedExchange 重定义”的编译错误,VC6则一切正常,我把这归咎为微软的问题,菜鸟的我无力解决。是了,我只用VC6编写Filter,其它编码使用的是VC.net,VC.net可完成一般的DirectShow编程,我本人更喜欢VC.net的编码环境。

  “请问Filter是什么?”这个问题在我脑中很久了,DirectShow的功能是由Filter搭建起来的,但我很久以来都被“Filter”这个词困惑着,直到现在才有些眉目。当然,我学识浅,很可能会说错,请海涵。Filter在影音风暴等软件中称为“滤镜”,在微软中国上一些译文把它译为“筛选器”,五花八门的(看来没有核心技术真的很被动)。而Filter在数字信号处理等专业课程中称为“滤波器”!这下您应该知道一点了吧,DirectShow对视频、音频的处理过程就是数字信号处理的过程,可以把数字信号处理的理论应用于此,微软为此把这个DirectShow部件称为Filter。

  再说Sample,我把它译为“采样”,也就是一个数据包,可理解为摄像头摄像或声卡录音时每扫描一次得到的数据、音视频文件每一帧的数据。
阅读(776) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~