zoukankan      html  css  js  c++  java
  • 实现类似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();
            }
        }

          其运行效果如下图所示:

         

          下载demo源码。    

  • 相关阅读:
    企业如何才能“勾搭”上服务网格技术?
    行云创新:云原生加速企业释放数据价值
    行云创新:后疫情时代,云原生为酒店数字化转型破局
    行云创新CEO马洪喜荣获“2021杰出质造人物奖”
    SolarMesh发布 v1.6.1版本,再不来体验就......
    什么是云原生?如何建设云原生平台?
    行云创新联合上汽乘用车打造云原生技术平台,加快实现数字化转型
    五分钟搭建你的第一个区块链应用
    mysql 存储过程
    MySQL-binlog日志格式 binlog_format三种模式详解
  • 原文地址:https://www.cnblogs.com/zhuweisky/p/2741748.html
Copyright © 2011-2022 走看看