繁体   English   中英

如何在QT中从qgraphicsview保存已编辑的图像

[英]how to save an edited image from qgraphicsview in QT

我正在编写代码以从文件中加载图像,并对图像进行一些编辑(更改某些像素的值),放大或缩小然后保存图像。 我尝试使用qgraphicview和qgraphicsscene保存图像。 但是,当我尝试保存图像时,它总是保存场景的可见区域。 我的目的是以原始分辨率保存编辑后的图像。 以下是我的代码。 加载部分:

void ImageViewer::loadFile(const QString &fileName)
{
    if (!fileName.isEmpty()) {
        image = new QImage(fileName);
        if (image->isNull()) {
            QMessageBox::information(this, tr("Image Viewer"),
                tr("Cannot load %1.").arg(fileName));
            return;
        }
        qgraphicsscene = myqgraphicsview->getScene();
        qgraphicsscene->setSceneRect(image->rect());
        myqgraphicsview->setScene(qgraphicsscene);
        qgraphicsscene->addPixmap(QPixmap::fromImage(*image));
        currentName = fileName;
    }
}

保存部分:

QPixmap pixMap = QPixmap::grabWidget(myqgraphicsview);
    pixMap.save(fileName);

我认为问题可能出在节省部分上。 我试图在QGraphicsScene中找到一种可以从中提取图像的方法,但是失败了。 有人可以帮忙吗? 非常感谢你!!!

addPixmap方法返回QGraphicsPixmapItem* 您需要记住它,并使用它来保存像素图。 例如:

class ImageViewer {
  QGraphicsView * m_view;
  QString m_currentName;
  QGraphicsPixmapItem * m_item;
  ...
};

ImageViewer::ImageViewer() : m_item(nullptr) { ... }

void ImageViewer::loadFile(const QString &fileName)
{
  if (fileName.isEmpty()) return;
  QImage image(fileName);
  if (image.isNull()) {
    QMessageBox::information(this, tr("Image Viewer"),
      tr("Cannot load %1.").arg(fileName));
    return;
  }
  QGraphicsScene * scene = m_view->scene();
  scene->setSceneRect(image->rect());
  m_item = scene->addPixmap(QPixmap::fromImage(image));
  m_currentName = fileName;
}

void ImageViewer::save()
{
  if (!m_item) return;
  QSaveFile file(m_currentName);
  if (! file.open(QIODevice::WriteOnly | QIODevice::Unbuffered)) {
    QMessageBox::information(this, tr("Image Viewer"),
      tr("Cannot save %1.").arg(m_currentName));
    return;
  }
  QImage const image = m_item->pixmap().toImage();
  image.save(&file);
  file.commit();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM