实现类似QQ自拍头像的功能(demo源码)
在很多软件系统中,都允许用户设置自己的头像,甚至可以直接使用摄像头照相作为自己的头像,就像QQ的自拍头像功能一样。

这种功能是如何实现的了?最直接的,我们可以使用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();
}
}

其运行效果如下图所示:

实现类似QQ自拍头像的功能(demo源码)的更多相关文章
- 类似QQ的应用毗邻(Pilin)即时聊天源码
这个应用是从安卓教程网分享过了的,个人觉得这个还是挺不错的,毗邻(Pilin)即时聊天应用源码,承诺的 基于xmpp openfire asmack 的即时聊天应用,继续完善,现在只完成了文字.表 ...
- C#如何实现类似QQ那样靠边隐藏的功能
http://www.cnblogs.com/yechensi/archive/2009/08/02/1537145.html C#如何实现类似QQ那样靠边隐藏的功能 你想过为自己的程序添加靠边隐藏的 ...
- 类似QQ消息左滑删除的Demo
最近在网上学到一篇类似QQ消息左滑删除的demo,完善了下代码,感觉还不错,特此分享一波: CustomSwipeListView.java 是个继承自ListView的类,里面调用了自定义View ...
- 教你使用Cocos Creator制作国旗头像生成器,附源码!
关注「编程小王子」公众号回复[头像生成器]获得源码! 下面我重点介绍一下Cocos Creator H5头像生成的实现方法: 获取手机相册图片 在 Cocos Creator 中加载相册图片 Coco ...
- div使用jqueryui 源码 | gridview多个功能的源码
div使用jqueryui 源码 | gridview多个功能的源码 一.gridview 选中行 改变颜色,双击选中 改变颜色 protected void gv1_SelectedIndexCha ...
- MVC中使用SignalR打造酷炫实用的即时通讯功能附源码
前言,现在这世道写篇帖子没个前言真不好意思发出来.本贴的主要内容来自于本人在之前项目中所开发的一个小功能,用于OA中的即时通讯.由于当时走的太急,忘记把代码拿出来.想想这已经是大半年前的事情了,时间过 ...
- 为SRS流媒体服务器添加HLS加密功能(附源码)
为SRS流媒体服务器添加HLS加密功能(附源码) 之前测试使用过nginx的HLS加密功能,会使用到一个叫做nginx-rtmp-module的插件,但此插件很久不更新了,网上搜索到一个中国制造的叫做 ...
- leaflet 实现克里金插值功能(附源码下载)
前言 leaflet 入门开发系列环境知识点了解: leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等 leaflet 在线例子 leaflet 插件,leaflet ...
- leaflet结合geoserver利用WFS服务实现图层删除功能(附源码下载)
前言 leaflet 入门开发系列环境知识点了解: leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等 leaflet 在线例子 leaflet 插件,leaflet ...
随机推荐
- Linode VPS上架日本东京2号机房,性能速度评测报告(推荐)
我非常喜欢的海外免备案vps品牌linode日本机房长期缺货,中国用户想买都买不到.不过近日,陆续有国内朋友收到了Linode邀请,Tokyo 2日本东京机房开启内测,很快正式上架销售. 苦等太久的站 ...
- hadoop(一)
1 环境熟悉安装jdk.hadoop配置xml文件,启动伪分布式运行example-jar,测试mapreduce程序2 mapreduce编程使用eclipse开发mapreduce程序,导出jar ...
- Front-End(二)——HTML
本文主要对html迭代学习中的要点.冷点简述罗列. html之前也说过,主要为了描述页面的结构和内容,合理使用结构化的标签,<h1>.<div>等,有利于前端开发,也有利于搜索 ...
- python 算法练习
根据给定的线性函数来确定函数的表达形式: examples: get_function([0,1,2,3,4]) => f(x)=x get_function([1,4,7,10,13]) =& ...
- jQuery学习笔记(一)--jQuery对象与DOM对象相互转换
通过标准的JavaScript操作DOM与jQuyer操作DOM的对比,我们不难发现: 通过jQuery方法包装后的对象,是一个类数组对象.它与DOM对象完全不同,唯一相似的是它们都能操作DOM. 通 ...
- tablesorter周边文档
一.简介: Tablesorter作用于一个标准的HTML表格(有THEAD,TBODY),实现静态排序:主要特点包括: (1) 多列排序: (2) 支持文本.URI地址.数值.货币.浮点数.IP地 ...
- 绿色版的mysql安装配置方式
解压下载好的压缩包 copy 一份my-default.ini改名字为my.ini为mysql的配置文件 打开my.ini 修改配置文件 默认的原版文件为 # For advice on how to ...
- [Q]升级/重新获取授权步骤
若因需要升级或授权文件失效(重装系统或其他原因),在服务期内可通过下面的步骤操作. 注:168元版提供2年升级及售后支持,118元版的提供1升级及售后支持. 步骤如下: 1. 重新获取CAD批量打图精 ...
- 读取HttpWebResponse流的两种方法及注意的问题
1. 获取流 HttpWebRequest request= (HttpWebRequest)WebRequest.Create(uri); //构建http request request ...
- 语义化标签SEO
语义标签 title 和 h1 的区别,我的理解是: title 是整个网页的标题,突出整个网站的内容,H1 突出的是一篇文章的内容. b 与 strong 的区别,b只是样式的加粗,strong 是 ...