如何将QGraphicsView中的图像保存为bmp / jpg

时间:2014-09-08 04:26:40

标签: qt qt4

我是Qt的新手。 问题是:在将图像转换为QGraphicsView之后,我使用qrubberband来选择图像的裁剪区域。目前选择抓地区是成功的。但我不知道如何将裁剪区域保存到jpg / bmp之后。请注意,我为GraphicsView创建了一个名为CGraphicsView的ui组件。

void CGraphicsView::mousePressEvent
    ( QMouseEvent* event)
{



 mypoint = event->pos();
 rubberBand = new QRubberBand(QRubberBand::Rectangle, this);//new rectangle band
 rubberBand->setGeometry(QRect(mypoint, QSize()));
 rubberBand->show();


 }

 void CGraphicsView::mouseMoveEvent(QMouseEvent *event)
 {
    if (rubberBand)
 {
 rubberBand->setGeometry(QRect(mypoint, event->pos()).normalized());//Area Bounding
 }
 }

 void CGraphicsView::mouseReleaseEvent(QMouseEvent *event)
 {
  if (rubberBand)
  {
     QRect myRect(mypoint, event->pos());
     rubberBand->hide();// hide on mouse Release
     QImage copyImage;  //<= this Qimage hold nothing
     copyImage = copyImage.copy(myRect);
  }

 }

2 个答案:

答案 0 :(得分:1)

Qt中有特殊方法。它允许获取视图的截图。

QString fileName = "path";
QPixmap pixMap = QPixmap::grabWidget(graphicsView, rectRegion);
pixMap.save(fileName);

Save()方法可以以不同的格式和压缩保存图片。

使用grabWidget()方法,您也可以抓取另一个小部件。此外,此方法将QRect作为参数,因此您可以创建所需区域的屏幕截图。

答案 1 :(得分:1)

您可以将场景的一部分保存为以下图像:

QPixmap pixmap=QPixmap(myRect.size());
QString filename = QFileDialog::getSaveFileName( this->parentWidget(), tr("Save As"), tr("image.png"));

    if( !filename.isEmpty() )
    {
        QPainter painter( &pixmap );
        painter.setRenderHint(QPainter::Antialiasing);
        scene->render( &painter, pixmap.rect(),myRect, Qt::KeepAspectRatio );
        painter.end();

        pixmap.save(filename,"PNG");
    }