Qt QImage 读写jpg格式 需要加载插件

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

QImage支持很多图像格式,有些是默认支持的,如png,bmp等。有些需要加载插件后才能支持,如jpg,tif等。

QImage默认支持格式如下图:bmp,png等

加载插件后支持的格式如下图:gif,jpg,tif


一、加载插件方式

在bin目录下,新建文件夹plugins,然后将Qt的imageformats文件夹拷贝到plugins下。其中imageformats内是插件dll。如下:

bin/plugins/imageformats/qjpeg.dll

1. 通过qt.conf文件配置,插件路径灵活

在bin目录下,新建文件qt.conf,然后添加下面内容。告诉程序加载bin/plugins下的插件。

[paths]
Plugins = ./plugins

2. 调用代码加载插件,插件路径固定

读写QImage前,添加插件路径。告诉程序加载bin/plugins下的插件。

QString appPath = QCoreApplication::applicationDirPath();
QCoreApplication::addLibraryPath(appPath + “/plugins”);

二、示例

1.读写png格式:打开1.png图,旋转45度后,保存成成新图1_out.png

代码如下(示例):

#include <QtCore/QCoreApplication>
#include <QImage>
#include <QImageReader>
#include <QDebug>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
	//QString appPath = QCoreApplication::applicationDirPath();
	//QStringList libPaths = QCoreApplication::libraryPaths();
	//QCoreApplication::addLibraryPath(appPath + "/plugins");
	//libPaths = QCoreApplication::libraryPaths();
qDebug() << "support format: " << QImageReader::supportedImageFormats();
QString filename = "d:/1.png";
	QImage image(filename);
	if (!image.isNull())
	{
		QTransform transform;
		transform.rotate(45); // 旋转45度
		image = image.transformed(transform);
		image.save("d:/1_out.png"); // 保存旋转后的图
	}
 return a.exec();
}

打印出QImage默认支持png格式
QImage默认格式

原图:1.png
在这里插入图片描述
旋转45度后效果图:1_out.png

在这里插入图片描述

2.读写jpg格式:打开1.jpg图,旋转45度后,保存成成新图1_out.jpg

2.1 通过qt.conf文件配置插件路径,插件路径灵活

代码如下(示例):

#include <QtCore/QCoreApplication>
#include <QImage>
#include <QImageReader>
#include <QDebug>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
	// QString appPath = QCoreApplication::applicationDirPath();
	// QStringList libPaths = QCoreApplication::libraryPaths();
	// qt.conf已经配置,无需再调用代码
	// QCoreApplication::addLibraryPath(appPath + "/plugins");
	// libPaths = QCoreApplication::libraryPaths();
qDebug() << "support format: " << QImageReader::supportedImageFormats();
QString filename = "d:/1.jpg";
	QImage image(filename);
	if (!image.isNull())
	{
		QTransform transform;
		transform.rotate(45);
		image = image.transformed(transform);
		image.save("d:/1_out.jpg");
	}

return a.exec();
}

2.2 调用代码加载插件,插件路径固定

代码如下(示例):

#include <QtCore/QCoreApplication>
#include <QImage>
#include <QImageReader>
#include <QDebug>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
	QString appPath = QCoreApplication::applicationDirPath();
	QStringList libPaths = QCoreApplication::libraryPaths();
	// 调用代码加载插件,否则无法读写jpg
	QCoreApplication::addLibraryPath(appPath + "/plugins");
	libPaths = QCoreApplication::libraryPaths();
qDebug() << "support format: " << QImageReader::supportedImageFormats();
QString filename = "d:/1.jpg";
	QImage image(filename);
	if (!image.isNull())
	{
		QTransform transform;
		transform.rotate(45);
		image = image.transformed(transform);
		image.save("d:/1_out.jpg");
	}
return a.exec();
}

加载插件后,打印出QImage支持jpg格式
在这里插入图片描述

原图:1.jpg
在这里插入图片描述

旋转45度后效果图:1_out.jpg
在这里插入图片描述


总结

Qt默认支持png格式,可以直接读写png。
Qt默认不支持jpg格式,需要加载插件后,才能读写jpg。
1.通过qt.conf文件配置jpg插件,插件路径灵活。
2.调用代码加载jpg插件,插件路径固定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值