关于Qt绘制大图片无法显示的问题(缩放图片)

Qt在加载图片时会把图片存入缓存(QPixmapCache),有时候图片过大而电脑内存不足的时候,程序会出现崩溃,因此在处理图片的时候可以考虑将图片缩放。

本处采用QImageWriter去重新保存文件
在qt开发中很容易遇到用QPixmap绘制图片无法显示的问题,而图片却能在windows或者第三方工具下正常显示,
原因大部分是因为图片后缀被修改了,这种情况又无法去通过改回后缀名来避免。

因此,可以在读写文件的时候,直接去除后缀,通过解析图片文件本身去获取图片格式。

bool checkImageSize(const QString & path, const QSize & decSize)
{
	//检查文件是否存在
	if (!QFile::exists(path)) {
		qInfo() << QStringLiteral("无法找到该路径下的文件") << path;
		return false;
	}
	
	//检查文件是否为图片
	QImageReader reader(path);
	reader.setDecideFormatFromContent(true);
	if (!reader.canRead()) {
		qInfo() << QStringLiteral("图片文件无效");
		return false;
	}

	//宽高都小于指定大小则不处理
	auto size = reader.size();
	if (size.width() <= decSize.width() && size.height() <= decSize.height()) {
		return true;
	}
	
	//图片缩放到decSize尺寸
	size.scale(maxSize, Qt::KeepAspectRatio);
	reader.setScaledSize(size);
	
	//获取图片格式
	QByteArray imageFormat = QImageReader::imageFormat(path);
	
	//写图片文件
	QImageWriter writer(path, imageFormat);
	bool status = writer.write(reader.read());
	if (status) {
		return true;
	}

	qInfo() << QStringLiteral("处理失败")<< path;
	return false;
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在QT Creator中绘制多张图片,可以使用QPainter类进行绘制。下面是一个简单的示例,演示如何在窗口中绘制多张图片。 首先,在QT Creator中创建一个新的窗口应用程序。然后打开mainwindow.cpp文件,在构造函数中添加以下代码: ``` MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { //设置窗口大小 setFixedSize(800, 600); } void MainWindow::paintEvent(QPaintEvent *event) { QPainter painter(this); //绘制第一张图片 QPixmap pixmap1(":/images/image1.png"); painter.drawPixmap(0, 0, pixmap1.scaled(200, 200, Qt::KeepAspectRatio)); //绘制第二张图片 QPixmap pixmap2(":/images/image2.png"); painter.drawPixmap(250, 0, pixmap2.scaled(200, 200, Qt::KeepAspectRatio)); //绘制第三张图片 QPixmap pixmap3(":/images/image3.png"); painter.drawPixmap(500, 0, pixmap3.scaled(200, 200, Qt::KeepAspectRatio)); } ``` 在这个示例中,我们首先设置了窗口的大小。然后在paintEvent()函数中,我们创建了一个QPainter对象,并使用drawPixmap()函数绘制了三张图片。每一张图片都使用相对于窗口左上角的坐标进行定位,并使用scaled()函数进行缩放,以使其适合在窗口中显示。 需要注意的是,这个示例假设有三张名为“image1.png”、“image2.png”和“image3.png”的图片文件位于项目资源文件中的“images”文件夹中。如果您的项目中的图片文件具有不同的名称或位置,请相应地修改示例中的文件路径。 最后,在QT Creator中编译并运行应用程序,您将看到在窗口中绘制了三张图片
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

离歌漠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值