0
点赞
收藏
分享

微信扫一扫

QGraphicsScene 中的场景保存成透明图片

Star英 2022-01-10 阅读 100

这里弄出两段关键代码:

一个是保存图片的函数:

void UICanvasView::saveToImage(const QString& imagePath)
{
	m_pScene->SetImageSaveFlag(true);
	int width = m_pScene->width();
	int height = m_pScene->height();

	QPixmap pixSaveImage(width, height);
	pixSaveImage.fill(QColor(0, 0, 0, 0));//用透明色填充
	QPainter painterTanns(&pixSaveImage);
	painterTanns.setRenderHint(QPainter::Antialiasing, true);
	painterTanns.setRenderHint(QPainter::TextAntialiasing, true);
	painterTanns.setRenderHint(QPainter::SmoothPixmapTransform, true);
	cleanAllSelected();
	m_pScene->render(&painterTanns);
	pixSaveImage.save(imagePath);
	m_pScene->SetImageSaveFlag(false);
	return;
}

为什么要SetImageSaveFlag,这是因为很多QGraphicsScene人的这里可能设置了背景函数:


void UICanvasScene::SetImageSaveFlag(bool bFlag)//正在保存图片时,要设置背景透明
{
	m_IsSaveImageingFlag = bFlag;
}

void UICanvasScene::drawBackground(QPainter *painter, const QRectF &rect)
{
	if (m_IsSaveImageingFlag)
	{//保存中的时候
		painter->fillRect(rect, QColor(0, 0, 0,0));
		QRectF sceneRect = this->sceneRect();
		QColor colSet = m_pBackgroundColorAttribute->getValue().value<QColor>();
		QColor newCol(255,255,255, 0);

		painter->fillRect(sceneRect, QBrush(newCol));
		return QGraphicsScene::drawBackground(painter, rect);
	}
	else
	{
		painter->fillRect(rect, QColor(60, 60, 60));
		QRectF sceneRect = this->sceneRect();
		painter->fillRect(sceneRect, QBrush(m_pBackgroundColorAttribute->getValue().value<QColor>()));
		return QGraphicsScene::drawBackground(painter, rect);
	}
	
}

所以保存时要特意设置一下,然后看下生成的图片吧,有ps看吧,只看图片也不知道透明了没,哈哈

 

举报

相关推荐

0 条评论