目录
注意
头文件
模块
步骤
实例
定义一个摄像头对象和一个摄像头拍照对象
在构造函数里获取当前电脑上所有可以用的摄像头存入链表
启动摄像头按钮点击事件
退出按钮点击事件
拍照按钮点击事件
保存图片槽函数定义和实现
摄像头在Qt Multimedia多媒体模块里
QCamera可与用于取景器显示的QCameraViewfinder、视频录制的QMediaRecorder、图像拍摄的QCamerAmageCapture一起使用
可以用QCameraInfo列出可以使用的相机并选择要使用的相机
摄像头功能
- 实时画面QCameraViewfinder
- 录像QMediaRecorder
- 抓照QCameralmageCa
注意
摄像头类QCamera先通过绑定取景器显示QCameraViewfinder来获取摄像头的数据,再将取景器显示QCameraViewfinder与要显示的界面控件绑定才可以显示到界面控件上。
头文件
#include <QCameraInfo>
#include <QCamera>//摄像头类
#include <QCameraViewfinder>//摄像头取景器
#include <QCameraImageCapture>//摄像头拍照
模块
QT += core gui multimedia multimediawidgets
步骤
- 定义一个摄像头对象和一个摄像头拍照对象
- 获取当前电脑上所有可以用的摄像头存入链表
- 实例化一个摄像头对象和摄像头取景器对象
- 取景器和ui控件进行绑定
- 取景器显示
- 将摄像头对象与取景器对象进行绑定
- 新疆一个图像对象
- 当捕捉到画面就保存下来
- 设置静态捕捉
- 启动摄像头
- 拍照
- 保存图片
- 退出摄像头
实例
定义一个摄像头对象和一个摄像头拍照对象
private:QCamera *camera;//摄像头对象QCameraImageCapture* imageCapture;//摄像头拍照类的对象
在构造函数里获取当前电脑上所有可以用的摄像头存入链表
//获取当前主机上 所有可用的摄像头列表const QList<QCameraInfo> cameras = QCameraInfo::availableCameras();//将摄像头列表显示到下拉控件中for(int i=0; i<cameras.size(); i++){ui->comboBox->addItem(cameras.at(i).deviceName());}
启动摄像头按钮点击事件
//实例化一个摄像头类的对象,参数为上面列表中的摄像头//可以选择默认的摄像头QCameraInfo::defaultCamera()camera = new QCamera(ui->comboBox->currentText().toUtf8());//实例化一个摄像头取景器类的对象//取景器跟当前界面上的UI控件进行绑定QCameraViewfinder *viewfinder = new QCameraViewfinder(ui->label_show);//根据控件的大小调整取景器的大小viewfinder->resize(ui->label_show->size());//取景器显示viewfinder->show();//将摄像头对象与取景器对象进行绑定//也就是让摄像头拍摄到的画面显示到取景器控件上camera->setViewfinder(viewfinder);//如果需要拍照就要下面的步骤,不需要可以不用,但也要启动摄像头//新建摄像头的拍照对象imageCapture = new QCameraImageCapture(camera);//当捕捉到画面之后,会发送一个信号,将信号关联函数,在函数中保存下来connect(imageCapture,&QCameraImageCapture::imageCaptured,this,&Widget::onSaveCaptureImage);//设置成静态捕捉,也就是说捕捉静态画面camera->setCaptureMode(QCamera::CaptureStillImage);//启动命令camera->start();
退出按钮点击事件
camera->stop();delete camera;
拍照按钮点击事件
//捕捉图片,捕捉后会触发一个信号,调用槽函数来实现保存图片imageCapture->capture();
保存图片槽函数定义和实现
//定义
private slots:void onSaveCaptureImage(int id, const QImage &preview);//实现
void Widget::onSaveCaptureImage(int id, const QImage &preview)
{//通过调用QIamge对象来保存图片preview.save("1.bmp");
}