#include "cvimageviewer.h" #include #include #include #include #include CvImageViewer::CvImageViewer(QWidget *parent, size_t lastId) : QWidget(parent), 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"<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(imgrect_.width())*origImage_.cols; int y = (event->y()-imgrect_.y())/static_cast(imgrect_.height())*origImage_.rows; qDebug()<= 0 && y >= 0 && x <= origImage_.cols && y < origImage_.rows) sigValue(x, y, origImage_.at(y,x)); } else { sigValue(x, y, 0); } } QWidget::mousePressEvent(event); } void CvImageViewer::paintEvent(QPaintEvent* event) { Q_UNUSED(event) QPainter painter(this); 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 imgrect_.setRect((rect().width()-rect().height()/ratio)/2, 0, rect().height()/ratio, rect().height()); painter.drawImage(imgrect_, qimage_); }