[英]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.