在很多软件系统中,都允许用户设置自己的头像,甚至可以直接使用摄像头照相作为自己的头像,就像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();
        }
    }

其运行效果如下图所示:

 下载demo源码。    

实现类似QQ自拍头像的功能(demo源码)的更多相关文章

  1. 类似QQ的应用毗邻(Pilin)即时聊天源码

      这个应用是从安卓教程网分享过了的,个人觉得这个还是挺不错的,毗邻(Pilin)即时聊天应用源码,承诺的 基于xmpp openfire asmack 的即时聊天应用,继续完善,现在只完成了文字.表 ...

  2. C#如何实现类似QQ那样靠边隐藏的功能

    http://www.cnblogs.com/yechensi/archive/2009/08/02/1537145.html C#如何实现类似QQ那样靠边隐藏的功能 你想过为自己的程序添加靠边隐藏的 ...

  3. 类似QQ消息左滑删除的Demo

    最近在网上学到一篇类似QQ消息左滑删除的demo,完善了下代码,感觉还不错,特此分享一波: CustomSwipeListView.java 是个继承自ListView的类,里面调用了自定义View ...

  4. 教你使用Cocos Creator制作国旗头像生成器,附源码!

    关注「编程小王子」公众号回复[头像生成器]获得源码! 下面我重点介绍一下Cocos Creator H5头像生成的实现方法: 获取手机相册图片 在 Cocos Creator 中加载相册图片 Coco ...

  5. div使用jqueryui 源码 | gridview多个功能的源码

    div使用jqueryui 源码 | gridview多个功能的源码 一.gridview 选中行 改变颜色,双击选中 改变颜色 protected void gv1_SelectedIndexCha ...

  6. MVC中使用SignalR打造酷炫实用的即时通讯功能附源码

    前言,现在这世道写篇帖子没个前言真不好意思发出来.本贴的主要内容来自于本人在之前项目中所开发的一个小功能,用于OA中的即时通讯.由于当时走的太急,忘记把代码拿出来.想想这已经是大半年前的事情了,时间过 ...

  7. 为SRS流媒体服务器添加HLS加密功能(附源码)

    为SRS流媒体服务器添加HLS加密功能(附源码) 之前测试使用过nginx的HLS加密功能,会使用到一个叫做nginx-rtmp-module的插件,但此插件很久不更新了,网上搜索到一个中国制造的叫做 ...

  8. leaflet 实现克里金插值功能(附源码下载)

    前言 leaflet 入门开发系列环境知识点了解: leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等 leaflet 在线例子 leaflet 插件,leaflet ...

  9. leaflet结合geoserver利用WFS服务实现图层删除功能(附源码下载)

    前言 leaflet 入门开发系列环境知识点了解: leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等 leaflet 在线例子 leaflet 插件,leaflet ...

随机推荐

  1. Linode VPS上架日本东京2号机房,性能速度评测报告(推荐)

    我非常喜欢的海外免备案vps品牌linode日本机房长期缺货,中国用户想买都买不到.不过近日,陆续有国内朋友收到了Linode邀请,Tokyo 2日本东京机房开启内测,很快正式上架销售. 苦等太久的站 ...

  2. hadoop(一)

    1 环境熟悉安装jdk.hadoop配置xml文件,启动伪分布式运行example-jar,测试mapreduce程序2 mapreduce编程使用eclipse开发mapreduce程序,导出jar ...

  3. Front-End(二)——HTML

    本文主要对html迭代学习中的要点.冷点简述罗列. html之前也说过,主要为了描述页面的结构和内容,合理使用结构化的标签,<h1>.<div>等,有利于前端开发,也有利于搜索 ...

  4. python 算法练习

    根据给定的线性函数来确定函数的表达形式: examples: get_function([0,1,2,3,4]) => f(x)=x get_function([1,4,7,10,13]) =& ...

  5. jQuery学习笔记(一)--jQuery对象与DOM对象相互转换

    通过标准的JavaScript操作DOM与jQuyer操作DOM的对比,我们不难发现: 通过jQuery方法包装后的对象,是一个类数组对象.它与DOM对象完全不同,唯一相似的是它们都能操作DOM. 通 ...

  6. tablesorter周边文档

    一.简介: Tablesorter​作用于一个标准的HTML表格(有THEAD,TBODY),实现静态排序:主要特点包括: (1) 多列排序: (2) 支持文本.URI地址.数值.货币.浮点数.IP地 ...

  7. 绿色版的mysql安装配置方式

    解压下载好的压缩包 copy 一份my-default.ini改名字为my.ini为mysql的配置文件 打开my.ini 修改配置文件 默认的原版文件为 # For advice on how to ...

  8. [Q]升级/重新获取授权步骤

    若因需要升级或授权文件失效(重装系统或其他原因),在服务期内可通过下面的步骤操作. 注:168元版提供2年升级及售后支持,118元版的提供1升级及售后支持. 步骤如下: 1. 重新获取CAD批量打图精 ...

  9. 读取HttpWebResponse流的两种方法及注意的问题

    1.  获取流 HttpWebRequest request= (HttpWebRequest)WebRequest.Create(uri); //构建http request     request ...

  10. 语义化标签SEO

    语义标签 title 和 h1 的区别,我的理解是: title 是整个网页的标题,突出整个网站的内容,H1 突出的是一篇文章的内容. b 与 strong 的区别,b只是样式的加粗,strong 是 ...