博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实现类似QQ自拍头像的功能(demo源码)
阅读量:6646 次
发布时间:2019-06-25

本文共 1618 字,大约阅读时间需要 5 分钟。

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

     

      这种功能是如何实现的了?最直接的,我们可以使用Windows提供的VFW技术或DirectX技术来捕获摄像头采集到的视频和图片。但是,无论使用这两种技术中的哪一个,要实现一个兼容所有摄像头而又运行稳定的拍照功能,都不是那么容易。幸运的是,已经内置集成了这种功能的一个WinForm控件PhotoPanel,我们可以直接拿来使用。

      PhotoPanel控件的主要接口如下图所示:

///   /// 初始化摄像头,并启动它。  ///   void Start();  ///   /// 停止摄像头。  ///   void Stop();  ///   /// 照相。返回当前帧。  ///           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;        ///         /// 拍照结果         ///         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();        }    }

      其运行效果如下图所示:

     

      。    

 

转载地址:http://eievo.baihongyu.com/

你可能感兴趣的文章
Spring MVC 单元测试Demo
查看>>
2019年春季学期第二周作业
查看>>
Linux的基础预备知识
查看>>
mysql 对比两个表的一致性
查看>>
公司网站 解决方案 案例
查看>>
kibana发音 logstash发音 ElasticSearch发音 音标 翻译
查看>>
Web 通信 之 长连接、长轮询(long polling)
查看>>
Python数据处理(持续更新)
查看>>
关于fastjson在序列化成JSON串时字段增加的问题
查看>>
meterpreter基本命令
查看>>
Java多线程
查看>>
python中的时间戳,与MySQL的时间戳的,对应与匹配
查看>>
构造函数(构造器)的正确重载方式------类
查看>>
mysql 存储过程动态执行sql语句
查看>>
Newtonsoft.Json 序列化和反序列化 时间格式
查看>>
java中数据的传递方式到底是怎样的!
查看>>
dp和px的转换
查看>>
手机视频如何下载到本地电脑
查看>>
php基础知识【函数】(9)数学和对象类函数
查看>>
java中this用法
查看>>