Qt5使用QCamera調用電腦攝像頭拍照並存儲例程

定義一個繼承自QWidget類的窗口類,如下:
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QImage>
#include <QCamera>
#include <QString>
#include <QCameraViewfinder>
#include <QCameraImageCapture>
#include <QPushButton>
#include <QVBoxLayout>
#include <QFileDialog>

namespace Ui {
    class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT
    public:
        explicit Widget(QWidget *parent = 0);
        ~Widget();
    public slots:
        void cameraImageCaptured(int,QImage);
        void on_exitButtonClicked();
    private:
        Ui::Widget *ui;
        QCamera* camere;
        QCameraViewfinder* viewfinder;
        QCameraImageCapture* imageCapture;
};
#endif // WIDGET_H

widget.cpp的代碼邏輯實現,如下:

#include "widget.h"
#include "ui_widget.h"
#include "FaceppApilib/FaceppApi.hpp"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    setWindowTitle("Camera");

    camere =new QCamera(this);
    viewfinder =new QCameraViewfinder(this);   //設置取景器
    imageCapture =new QCameraImageCapture(camere); //圖片捕獲

    QPushButton* button1 =new QPushButton("Capture");
    QPushButton* button2 =new QPushButton("Exit");

    QVBoxLayout* mainLayout =new QVBoxLayout(this);
    mainLayout->addWidget(viewfinder); //將取景器加入主界面中
    mainLayout->addWidget(button1);
    mainLayout->addWidget(button2)

    connect(button1,SIGNAL(clicked()),imageCapture,SLOT(capture())); //將按鍵和圖片捕獲的槽函數綁定,點擊按鈕進行拍照
    connect(button2,SIGNAL(clicked()),this,SLOT(on_exitButtonClicked()));
    connect(imageCapture,SIGNAL(imageCaptured(int,QImage)),this,SLOT(cameraImageCaptured(int,QImage)));

    imageCapture->setCaptureDestination(QCameraImageCapture::CaptureToFile);//設置捕獲的目的
    camere->setCaptureMode(QCamera::CaptureStillImage);//設置捕獲模式爲將捕獲的圖片作爲文件
    camere->setViewfinder(viewfinder);
    camere->start();
}

Widget::~Widget()
{
    delete ui;
}

void Widget::cameraImageCaptured(int,QImage image)
{   //保存圖片格式,路徑
    QString savepath=QFileDialog::getSaveFileName(this,"Save Capture","Capture",
                                                  "Image png(*.png);;Image jpg(*.jpe);;Image bmp(*.bmp)");
    if(!savepath.isEmpty()){
        image.save(savepath);
    }
}

void Widget::on_exitButtonClicked()
{
    camere->stop();//關閉攝像頭
    close();
}


 

 

 


 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章