在标签中显示来自QCamera的图像

时间:2015-01-06 13:40:42

标签: c++ qt camera rotation qlabel

我正在编写一个程序,以显示彼此相邻的两个摄像头。在Qt中,QCamera非常简单。但是我的相机转了90°,所以我也必须把相机转过来。

QCamera变量没有打开它的命令,所以我想在标签中显示它,而不是在取景器中显示。所以我拍摄一张图片,将其翻转并以标签显示。

QImage img;
QPixmap img_;
img = ui->viewfinder->grab().toImage();
img_ = QPixmap::fromImage(img);
img_ = img_.transformed(QTransform().rotate((90)%360));
QImage img2;
QPixmap img2_;
img2 = ui->viewfinder->grab().toImage();
img2_ = QPixmap::fromImage(img2);
img2_ = img2_.transformed(QTransform().rotate((90)%360));
ui->label->setPixmap(img_);
ui->label_2->setPixmap(img2_);

当我启动程序时,只有两个黑盒子彼此相邻。 (在代码中缺少我deklare它的部分,但相机在取景器中工作正常,所以我认为没有问题)

2 个答案:

答案 0 :(得分:0)

试试这个: img_ = QPixmap::grabWindow(ui->viewfinder->winId(), 0, 0, -1, -1);(用于拍摄QPixmap的快照) 要么 img = QPixmap::grabWindow(ui->viewfinder->winId(), 0, 0, -1, -1).toImage();(用于拍摄QImage的快照)

答案 1 :(得分:0)

您可以使用相机的方向来校正取景器中的图像方向,如Qt文档中所述。这是链接:

http://doc.qt.io/qt-5/cameraoverview.html

以下是文档中的代码:

// Assuming a QImage has been created from the QVideoFrame that needs to be presented
QImage videoFrame;
QCameraInfo cameraInfo(camera); // needed to get the camera sensor position and orientation

// Get the current display orientation
const QScreen *screen = QGuiApplication::primaryScreen();
const int screenAngle = screen->angleBetween(screen->nativeOrientation(), screen->orientation());

int rotation;
if (cameraInfo.position() == QCamera::BackFace) {
    rotation = (cameraInfo.orientation() - screenAngle) % 360;
} else {
    // Front position, compensate the mirror
    rotation = (360 - cameraInfo.orientation() + screenAngle) % 360;
}

// Rotate the frame so it always shows in the correct orientation
videoFrame = videoFrame.transformed(QTransform().rotate(rotation));

看起来你甚至不明白,你在看什么...... 是什么意思将这样的东西粘贴到论坛?你读过关于这个的所有描述了吗?它只是代码的一部分 - 我看到你不明白,但你试图变得聪明:)