mainny ui improcements
This commit is contained in:
@ -1,21 +1,60 @@
|
||||
#include "cvimageviewer.h"
|
||||
#include <QPicture>
|
||||
#include <QDebug>
|
||||
#include <QMouseEvent>
|
||||
#include <QFileDialog>
|
||||
#include <opencv2/imgcodecs.hpp>
|
||||
|
||||
CvImageViewer::CvImageViewer(QWidget *parent, size_t lastId) :
|
||||
QWidget(parent),
|
||||
lastId_(lastId)
|
||||
lastId_(lastId),
|
||||
saveAction_("Save Image", nullptr)
|
||||
{
|
||||
connect(&saveAction_, &QAction::triggered, this, &CvImageViewer::saveImage);
|
||||
qimage_.load(":/images/noimage.png");
|
||||
|
||||
imageContextMenu_.addAction(&saveAction_);
|
||||
}
|
||||
|
||||
CvImageViewer::~CvImageViewer()
|
||||
{
|
||||
}
|
||||
|
||||
void CvImageViewer::saveImage()
|
||||
{
|
||||
QString fileName;
|
||||
if(origImage_.type() == CV_8UC3 || origImage_.type() == CV_8SC3 || origImage_.type() == CV_8UC1 || origImage_.type() == CV_8SC1)
|
||||
{
|
||||
fileName = QFileDialog::getSaveFileName(this, "Save Image", "./", "*.mat *.png" );
|
||||
}
|
||||
else
|
||||
{
|
||||
fileName = QFileDialog::getSaveFileName(this, "Save Image", "./", "*.mat" );
|
||||
}
|
||||
if(!fileName.isEmpty())
|
||||
{
|
||||
QStringList tokens = fileName.split('.');
|
||||
if(tokens.back() != "mat" && tokens.back() != "png")
|
||||
fileName.append(".mat");
|
||||
tokens = fileName.split('.');
|
||||
if(tokens.back() == "png")
|
||||
{
|
||||
imwrite(fileName.toStdString(), origImage_);
|
||||
}
|
||||
else
|
||||
{
|
||||
cv::FileStorage matf(fileName.toStdString(), cv::FileStorage::WRITE);
|
||||
matf<<"image"<<origImage_;
|
||||
matf.release();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CvImageViewer::setImage(Camera::Image img)
|
||||
{
|
||||
image_ = img.mat;
|
||||
origImage_=img.mat;
|
||||
qDebug()<<"viwer got"<<image_.rows<<'x'<<image_.cols<<" type "<<image_.type()<<"image from camera"<<img.cameraId;
|
||||
if(image_.type() == CV_8UC3 || image_.type() == CV_8SC3)
|
||||
{
|
||||
qimage_ = QImage(image_.data, image_.cols, image_.rows, image_.step, QImage::Format_RGB888);
|
||||
@ -37,19 +76,41 @@ void CvImageViewer::setImage(Camera::Image img)
|
||||
update();
|
||||
}
|
||||
|
||||
void CvImageViewer::mousePressEvent(QMouseEvent *event)
|
||||
{
|
||||
if(event->button() == Qt::RightButton)
|
||||
{
|
||||
saveAction_.setEnabled(origImage_.data);
|
||||
imageContextMenu_.popup(event->globalPos());
|
||||
}
|
||||
else if(origImage_.data && event->x() > imgrect_.x() && event->y() > imgrect_.y() && event->x() < imgrect_.x()+imgrect_.width() && event->y() < imgrect_.y()+imgrect_.height())
|
||||
{
|
||||
int x = (event->x()-imgrect_.x())/static_cast<double>(imgrect_.width())*origImage_.cols;
|
||||
int y = (event->y()-imgrect_.y())/static_cast<double>(imgrect_.height())*origImage_.rows;
|
||||
qDebug()<<x<<y;
|
||||
if(origImage_.type() == CV_32FC1)
|
||||
{
|
||||
if(x >= 0 && y >= 0 && x <= origImage_.cols && y < origImage_.rows)
|
||||
sigValue(x, y, origImage_.at<float>(y,x));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
sigValue(x, y, 0);
|
||||
}
|
||||
}
|
||||
QWidget::mousePressEvent(event);
|
||||
}
|
||||
|
||||
void CvImageViewer::paintEvent(QPaintEvent* event)
|
||||
{
|
||||
Q_UNUSED(event)
|
||||
QPainter painter(this);
|
||||
|
||||
if(!fixedOnWidth_)
|
||||
{
|
||||
double ratio = qimage_.size().width() / qimage_.size().height();
|
||||
painter.drawImage(QRect((rect().width()-rect().height())/2, rect().y(), rect().height()*ratio, rect().height()), qimage_);
|
||||
}
|
||||
double ratio = qimage_.size().height() / (double)qimage_.size().width();
|
||||
if(rect().width()*ratio <= rect().height())
|
||||
imgrect_.setRect(0, (rect().height()-rect().width()*ratio)/2, rect().width(), rect().width()*ratio);
|
||||
else
|
||||
{
|
||||
double ratio = qimage_.size().height() / qimage_.size().width();
|
||||
painter.drawImage(QRect(rect().x(), (rect().height()-rect().width())/2, rect().width(), rect().width()*ratio), qimage_);
|
||||
}
|
||||
imgrect_.setRect((rect().width()-rect().height()/ratio)/2, 0, rect().height()/ratio, rect().height());
|
||||
painter.drawImage(imgrect_, qimage_);
|
||||
}
|
||||
|
Reference in New Issue
Block a user