实现类似QQ自拍头像的功能(demo源码)

简介: 在很多软件系统中,都允许用户设置自己的头像,甚至可以直接使用摄像头照相作为自己的头像,就像QQ的自拍头像功能一样。             这种功能是如何实现的了?最直接的,我们可以使用Windows提供的VFW技术或DirectX技术来捕获摄像头采集到的视频和图片。

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

 

目录
相关文章
|
缓存 移动开发 JavaScript
uniapp H5 公众号微信自定义分享qq,微信带图片标题内容
uniapp H5 公众号微信自定义分享qq,微信带图片标题内容
767 0
uniapp H5 公众号微信自定义分享qq,微信带图片标题内容
|
3月前
|
人工智能 Serverless API
想要一个龙年头像,在线等挺急的
想要一个龙年头像,在线等挺急的
856 52
uniapp上传头像和最多上传9张demo效果(整理)
uniapp上传头像和最多上传9张demo效果(整理)
|
9月前
|
编译器 Python Windows
用python一键生成你的微信好友头像墙
用python一键生成你的微信好友头像墙
仿QQ聊天室【方案】
仿QQ聊天室【方案】
108 0
|
定位技术 开发者
QQ 与地图的修改| 学习笔记
快速学习 QQ 与地图的修改。
64 0
QQ 与地图的修改| 学习笔记
|
搜索推荐 程序员 Go
|
JavaScript 前端开发 Java
Fdog系列(一):思来想去,不如写一个聊天软件,那就从仿QQ注册页面开始吧。
我们来看如何用html写一个注册页面并使用js加载用户输入响应,在第二篇,将带领大家学习如何将html变成jsp,并使用java写其对应的后台响应。
Fdog系列(一):思来想去,不如写一个聊天软件,那就从仿QQ注册页面开始吧。
|
小程序 Python
python 小程序二维码的获取,以及改变小程序二维码中间logo为用户头像
python 小程序二维码的获取,以及改变小程序二维码中间logo为用户头像
251 0
python 小程序二维码的获取,以及改变小程序二维码中间logo为用户头像
|
Android开发
Android 调用系统分享文字、图片、文件,可直达微信、朋友圈、QQ、QQ空间、微博
原文:Android 调用系统分享文字、图片、文件,可直达微信、朋友圈、QQ、QQ空间、微博 兼容SDK 18以上的系统,直接调用系统分享功能,分享文本、图片、文件到第三方APP,如:微信、QQ、微博等 因为偷懒,可直达微信、朋友圈、QQ、QQ空间、微博的分享仅写了图片分享的,其他的文本、文件分享不常用到,就不写了。
6334 0