我是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);
}
}
答案 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");
}