实现类似QQ自拍头像的功能(demo源码)
2016-11-24 10:35
239 查看
在很多软件系统中,都允许用户设置自己的头像,甚至可以直接使用摄像头照相作为自己的头像,就像QQ的自拍头像功能一样。
这种功能是如何实现的了?最直接的,我们可以使用Windows提供的VFW技术或DirectX技术来捕获摄像头采集到的视频和图片。但是,无论使用这两种技术中的哪一个,要实现一个兼容所有摄像头而又运行稳定的拍照功能,都不是那么容易。幸运的是,OMCS已经内置集成了这种功能的一个WinForm控件PhotoPanel,我们可以直接拿来使用。
PhotoPanel控件的主要接口如下图所示:
将PhotoPanel控件从工具箱拖到你的UI上,调用其Start方法,将初始化摄像头,并启动它,然后PhotoPanel控件表面将绘制摄像头采集到的视频。
当要拍照的时候,则调用GetCurrentImage方法得到当前帧,并保存为位图。
当拍照结束后,则调用Stop方法停止并释放摄像头设备。
还有两个问题:
(1)如何设置要使用的摄像头的索引了?这个可以通过PhotoPanel控件暴露的CameraIndex属性来指定。
(2)如何设置拍照的尺寸了?拍照的尺寸即是PhotoPanel的尺寸,其默认值为160*120。当然这个尺寸并不是任意的,必须是当前摄像头所支持的分辨率才可以。比如,160*120、320*240、640*480等,一般摄像头都是支持的。
OK,下面我们就写了一个使用PhotoPanel来实现自拍头像功能的demo,demo的主要代码如下所示:
其运行效果如下图所示:
下载demo源码。
这种功能是如何实现的了?最直接的,我们可以使用Windows提供的VFW技术或DirectX技术来捕获摄像头采集到的视频和图片。但是,无论使用这两种技术中的哪一个,要实现一个兼容所有摄像头而又运行稳定的拍照功能,都不是那么容易。幸运的是,OMCS已经内置集成了这种功能的一个WinForm控件PhotoPanel,我们可以直接拿来使用。
PhotoPanel控件的主要接口如下图所示:
/// <summary> /// 初始化摄像头,并启动它。 /// </summary> void Start(); /// <summary> /// 停止摄像头。 /// </summary> void Stop(); /// <summary> /// 照相。返回当前帧。 /// </summary> Bitmap GetCurrentImage();
将PhotoPanel控件从工具箱拖到你的UI上,调用其Start方法,将初始化摄像头,并启动它,然后PhotoPanel控件表面将绘制摄像头采集到的视频。
当要拍照的时候,则调用GetCurrentImage方法得到当前帧,并保存为位图。
当拍照结束后,则调用Stop方法停止并释放摄像头设备。
还有两个问题:
(1)如何设置要使用的摄像头的索引了?这个可以通过PhotoPanel控件暴露的CameraIndex属性来指定。
(2)如何设置拍照的尺寸了?拍照的尺寸即是PhotoPanel的尺寸,其默认值为160*120。当然这个尺寸并不是任意的,必须是当前摄像头所支持的分辨率才可以。比如,160*120、320*240、640*480等,一般摄像头都是支持的。
OK,下面我们就写了一个使用PhotoPanel来实现自拍头像功能的demo,demo的主要代码如下所示:
public partial class TakePhotoForm : Form { public TakePhotoForm() { InitializeComponent(); this.photoPanel1.CameraIndex = 0;//设置摄像头 this.photoPanel1.Start();//启动摄像头 } private Bitmap photo = null; /// <summary> /// 拍照结果 /// </summary> public Bitmap Photo { get { return photo; } set { photo = value; } } //拍照 private void button1_Click(object sender, EventArgs e) { this.photo = this.photoPanel1.GetCurrentImage(); this.photoPanel1.Stop(); this.DialogResult = System.Windows.Forms.DialogResult.OK; } private void TakePhotoForm_FormClosing(object sender, FormClosingEventArgs e) { this.photoPanel1.Stop(); } }
其运行效果如下图所示:
下载demo源码。
相关文章推荐
- 完美实现类似QQ的自拍头像、上传头像功能!(Demo 源码)
- 实现类似QQ自拍头像的功能(demo源码)
- 完美实现类似QQ的自拍头像、上传头像功能!(Demo 源码)
- 完美实现类似QQ的自拍头像、上传头像功能!(Demo 源码)
- 实现类似QQ自拍头像的功能(demo源码)
- 实现类似QQ自拍头像的功能(demo源码)
- 可在广域网部署运行的QQ高仿版 -- GG叽叽V3.5,增加自拍头像功能、细节优化(源码)
- Android实现类似换QQ头像功能(图片裁剪)
- Android实现类似换QQ头像功能(图片裁剪)
- JS实现延迟隐藏功能的方法(类似QQ头像鼠标放上展示信息)
- 实现类似QQ记住密码的功能
- Qt实现局域网聊天室:类似QQ抖动窗口功能的实现
- Flex中如何实现类似像QQ登录框中那种“记住密码”、“自动登录”功能,还有如何实现文本框中记录最后一次输入的值?
- 类似QQ贴边掩藏功能的实现(三)
- java web中实现同一帐号同一时间只能一个地点登陆(类似QQ登录的功能)
- VS2008中,MFC对话框类实现类似QQ拖拽上传文件的功能,CWnd::OnDropFiles
- 用Java实现类似QQ弹出的ToolTip框的功能
- winform实现任务栏隐藏、通知栏图标及右键、类似QQ隐藏窗体等功能
- java web中实现同一帐号同一时间只能一个地点登陆(类似QQ登录的功能)
- ListView实现分页功能【附Demo源码】