Qt应用程序开发八:Qt摄像头QCamera应用

编程入门 行业动态 更新时间:2024-10-11 15:20:39

Qt应用<a href=https://www.elefans.com/category/jswz/34/1771384.html style=程序开发八:Qt摄像头QCamera应用"/>

Qt应用程序开发八:Qt摄像头QCamera应用

效果图:

//CSDNCamera.proQT       += core gui
QT      += multimediawidgets
QT      += multimediagreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = CSDNCamera
TEMPLATE = appSOURCES += main.cpp\CSDNCamera.cppHEADERS  += CSDNCamera.hFORMS    += CSDNCamera.ui
//CSDNCamera.h#ifndef CSDNCAMERA_H
#define CSDNCAMERA_H#include <QWidget>
#include<QCamera>
#include<QCameraViewfinder>
#include<QCameraImageCapture>
#include<QMediaRecorder>namespace Ui {
class CSDNCamera;
}class CSDNCamera : public QWidget
{Q_OBJECTpublic:explicit CSDNCamera(QWidget *parent = 0);~CSDNCamera();void openCamera(QString description=QString());void enumCamera();void bindRecoder(QCamera *camera);private slots:void on_btn_record_video_clicked();void on_btn_cut_image_clicked();void onImageCaptured(int id,QImage img);void on_btn_open_camera_clicked();void on_btn_record_video_stop_clicked();private:Ui::CSDNCamera *ui;QCamera*               mCamera;         //摄像头对象QCameraViewfinder*     mViewfinder;     //摄像头取景器QCameraImageCapture*   mImageCapture;   //截图对象QMediaRecorder*        mMediaRecorder;  //视频录制对象};#endif // CSDNCAMERA_H
//CSDNCamera.cpp#include "CSDNCamera.h"
#include "ui_CSDNCamera.h"
#include<QCameraInfo>
#include<QDebug>
#include<QAudioEncoderSettings>
#include<QUrl>CSDNCamera::CSDNCamera(QWidget *parent) :QWidget(parent),ui(new Ui::CSDNCamera)
{ui->setupUi(this);mCamera = NULL;mViewfinder = new QCameraViewfinder(ui->widget_camrea_view);mViewfinder->resize(ui->widget_camrea_view->size());mViewfinder->setAspectRatioMode(Qt::KeepAspectRatio);//设置全视角显示enumCamera();}CSDNCamera::~CSDNCamera()
{if(mCamera != NULL)mCamera->stop();delete ui;
}void CSDNCamera::openCamera(QString description)
{if(description.isEmpty()){QCameraInfo info = QCameraInfo::defaultCamera(); //默认摄像头mCamera = new QCamera(info,this);}else{QList<QCameraInfo> cameras = QCameraInfo::availableCameras();foreach (const QCameraInfo &cameraInfo, cameras){if(cameraInfo.description() == description){mCamera = new QCamera(cameraInfo,this);break;}}}mCamera->setCaptureMode(QCamera::CaptureVideo);connect(mCamera, static_cast<void(QCamera::*)(QCamera::Error)>(&QCamera::error),[=](QCamera::Error value){ qDebug()<<value;});//设置摄像头取景器mCamera->setViewfinder(mViewfinder);//绑定截图对象mImageCapture = new QCameraImageCapture(mCamera);connect(mImageCapture,SIGNAL(imageCaptured(int,QImage)),SLOT(onImageCaptured(int,QImage)));bindRecoder(mCamera);//开启摄像头mCamera->start();}/*
@brief       枚举摄像头
@return
*/
void CSDNCamera::enumCamera()
{QList<QCameraInfo> cameras = QCameraInfo::availableCameras();foreach (const QCameraInfo &cameraInfo, cameras){ui->comboBox_camera->addItem(cameraInfo.description());}
}
/*
@brief          设置录制格式
@param  camera  摄像头对象
@return
windows 下测试无效,其他解决方案 用QtMEL 详情 /
*/
void CSDNCamera::bindRecoder(QCamera *camera)
{mMediaRecorder = new QMediaRecorder(camera,this);connect(mMediaRecorder, static_cast<void(QMediaRecorder::*)(QMediaRecorder::Error)>(&QMediaRecorder::error),[=](QMediaRecorder::Error error){ qDebug()<<error;});connect(mMediaRecorder,&QMediaRecorder::statusChanged,[=](QMediaRecorder::Status status){qDebug()<<status;});//设置音频编码格式QAudioEncoderSettings audioSettings;audioSettings.setCodec("audio/amr");audioSettings.setQuality(QMultimedia::HighQuality);//mMediaRecorder->setAudioSettings(audioSettings);QVideoEncoderSettings settings = mMediaRecorder->videoSettings();settings.setResolution(640,480);settings.setQuality(QMultimedia::VeryHighQuality);settings.setFrameRate(30.0);settings.setCodec("video/mp4");mMediaRecorder->setVideoSettings(settings);mMediaRecorder->setOutputLocation(QUrl(qApp->applicationDirPath() + "/xzp.mp4"));
}void CSDNCamera::on_btn_record_video_clicked()
{if(!mCamera) return;qDebug()<<"start record";mMediaRecorder->record();
}void CSDNCamera::on_btn_cut_image_clicked()
{if(!mCamera) return;mImageCapture->capture();
}/*
@brief       显示截图
@param id    截图ID
@param img   mImageCapture截图返回的图片信息
@return
*/
void CSDNCamera::onImageCaptured(int id, QImage img)
{qDebug()<<id;ui->lab_cutImage->setPixmap(QPixmap::fromImage(img).scaled(ui->lab_cutImage->size()));
}void CSDNCamera::on_btn_open_camera_clicked()
{openCamera();//打开默认摄像头//openCamera(ui->comboBox_camera->currentText()); 打开选择的摄像头}void CSDNCamera::on_btn_record_video_stop_clicked()
{if(!mCamera) return;mMediaRecorder->stop();
}

 

更多推荐

Qt应用程序开发八:Qt摄像头QCamera应用

本文发布于:2024-03-04 04:13:33,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1708239.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:程序开发   摄像头   Qt   QCamera

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!