• 3256阅读
  • 2回复

[提问]为什么QImage image声明在函数体内时不可以实现拍照效果 [复制链接]

上一主题 下一主题
 

只看楼主 倒序阅读 楼主  发表于: 2016-04-19
window.open('http://www.qtcn.org/bbs/attachment/Mon_1604/17_166243_540721ef534129b.png?13');" style="max-width:700px;max-height:700px;" onload="if(is_ie6&&this.offsetWidth>700)this.width=700;" >照功能
/*********************************************mainwindow.h********************************************************/
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QCamera>
#include <QCameraViewfinder>
#include <QCameraImageCapture>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private slots:
    void captureImage();    //捕捉画面图片
    void displayImage(int , QImage);  //显示图片
    void saveImage();   //保存图片

private:
    Ui::MainWindow *ui;
    QCamera *camera;    //声明一个摄像机类指针
    QCameraViewfinder *viewfinder;  //声明一个摄像机视图取景器
    QCameraImageCapture *imageCapture;  //声明一个图像捕捉类
};

#endif // MAINWINDOW_H

/***********************************************************mainwindow.cpp*****************************************************/
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    camera = new QCamera(this);     //创建相机
    viewfinder = new QCameraViewfinder(this);   //创建视图取景器
    imageCapture = new QCameraImageCapture(camera); //创建图像捕捉器

    ui->verticalLayout->addWidget(viewfinder);  //向垂直布局中添加视图取景器部件
    ui->label_display->setScaledContents(true); //通过setScaledContents(bool)设置图片自适应标签label

    camera->setViewfinder(viewfinder);  //通过函数setViewfinder(QVideoWidget viewfinder)设置视图取景器
    camera->start();    //开启摄像头

    connect(imageCapture,SIGNAL(imageCaptured(int,QImage)),this,SLOT(displayImage(int,QImage)));
    connect(ui->Capture_Button,SIGNAL(clicked(bool)),this,SLOT(captureImage()));
    connect(ui->Save_Button,SIGNAL(clicked(bool)),this,SLOT(saveImage()));
    connect(ui->Exit_Button,SIGNAL(clicked(bool)),qApp,SLOT(quit()));
}

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

//捕捉图片(拍照)
void MainWindow::captureImage()
{
    ui->statusBar->showMessage(tr("正在捕获图片"),5000);  //设置状态栏显示的信息
    imageCapture->capture();    //通过捕捉函数capture()拍照
}

//显示捕捉到的图片
void MainWindow::displayImage(int ,QImage image) //为什么QImage image作为函数形参是可以实现拍照效果,而当QImage image不作为函数形参声明在函数体内时不可以实现拍照功能
{
    ui->label_display->setPixmap(QPixmap::fromImage(image));    //通过函数setPixmap()将图片绑定到显示标签中
//    ui->label_2->setPixmap(QPixmap::fromImage(image));
    ui->statusBar->showMessage(tr("捕获成功"),5000);
    return ;
}

void MainWindow::saveImage()
{
    QString fileName = QFileDialog::getSaveFileName(this,tr("保存到文件"),QDir::homePath(),tr("jpeg格式文件(*.jpg)"));
    if(fileName.isEmpty())
    {
        ui->statusBar->showMessage(tr("保存操作取消"),5000);
        return ;
    }
    const QPixmap *pixmap = ui->label_display->pixmap();
    if(pixmap)
    {
        pixmap->save(fileName);
        ui->statusBar->showMessage(tr("保存成功"),5000);
    }
}
本帖提到的人: @XChinux @lifengjz @q洁士铭
离线uidab

只看该作者 1楼 发表于: 2016-04-19
你定义成指针类型的再试试。
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!

只看该作者 2楼 发表于: 2016-04-19

自己试了一下,当QImage image不作为函数形参声明在函数体内时就不可以实现摄像头拍照效果了,而QImage image 作为函数形参时可以实现拍照效果?。什么原因啊,一直没有弄明白。求大神帮忙看一下
快速回复
限100 字节
 
上一个 下一个