Qt图片转ICON多尺寸小工具
在逛吾爱破解论坛的时候,看到有个帖子,是关于图片转ICON的python版本,打包有点问题,加上自己确实有时候会用到每次都是打开在线网站,于是我就自己写了一个支持多尺寸的Qt图片转ICON小工具,分享给大家
实现过程(思路)
众所周知,Qt已经帮我们封装好了图片转ICON的函数,但是Qt的图片转ICON函数只支持一个尺寸,所以我们需要自己写一个支持多尺寸的图片转ICON函数,将任意图片调用QImage的save函数(如果指定了后缀名为.ico,则自动保存为的ICON文件)。
函数原型如下:
1
2bool save(const QString &fileName, const char *format = Q_NULLPTR, int quality = -1) const
bool save(QIODevice *device, const char *format = Q_NULLPTR, int quality = -1) const
在逛论坛的时候看到帖子得知Icon支持一个文件多个尺寸,同时在QIcon函数中发现有一个QICon添加多个图片的接口
1 | void addFile(const QString &fileName, const QSize &size = QSize(), Mode mode = Normal, State state = Off) |
同时也有函数
1 | QList<QSize> availableSizes() const |
看来确实支持多尺寸,但是找来有找去就没有发现保存的接口
1 |
|
查看QIcon的头文件发现有个函数,可惜是私有的,不管了,先拿过来用用,但是转化结果不对
1 | friend Q_GUI_EXPORT QDataStream &operator<<(QDataStream &, const QIcon &); |
不死心就继续查找,发现QtIcoHandler内部类ICOReader的write接口看起来像实现了保存的接口只是没有暴露,于是改写摘录出来,最终完美收官
1 | bool ICOReader::write(QIODevice *device, const QVector<QImage> &images) |
软件界面
结果验证
支持多尺寸,支持png、jpg、bmp等格式,vs2019打开可以看到支持多尺寸
代码
Ps
记得很久以前发现有个将文件追加到图片后面的命令,于是惊叹竟然还有这个骚操作,现在想起来ICON 就是利用了图片格式玩的花样吧,具体代码上方的github链接
1 | copy /b 原图片.bmp+大片.mp4 目标.bmp |
您的支持是我前行的动力!