Qt开发记录14——处理jpg图片后保持图片dpi(及QImage通过load加载jpg图片失败)的解决方法

1、必须载入qjpeg.dll库

#include "mainwindow.h"
#include <QApplication>

#include "src/utils/utils.h"

int main(int argc, char *argv[])
{
    printLog("载入qjpeg.dll库");
    QString qjpeg("qjpeg.dll");
    QLibrary qjpeglib(qjpeg.toUtf8().data());
    if (qjpeglib.load())
    {
        printLog("成功载入有效jpeg驱动");
    }

    QApplication a(argc, argv);
    MainWindow w;
    w.showMaximized();
    return a.exec();
}

qjpeg.dll库文件在“plugins\imageformats”下
例如我的:“D:\Qt\Qt5.12.2\5.12.2\mingw73_64\plugins\imageformats”
复制到项目路径下,例如我的就在项目路径下lib文件夹中。
在这里插入图片描述

2、QImage通过load加载图片并读取水平分辨率和垂直分辨率

/**
 * @brief Picture::loadImage 载入图片
 * @param fileName 图片路径
 */
void Picture::loadImage(const QString &fileName)
{
	printLog("备份图片路径,保存的时候使用");
    m_filePath = fileName;
    printLog("读取Mat类型图片");
    m_showImg = imread(fileName.toLocal8Bit().toStdString());
    printLog("读取QPixmap类型图片");
    if (!p_showImg.load(fileName)) {
        printLog("如果读取QPixmap类型图片失败,则转换Mat类型为QPixmap类型");
        p_showImg = Mat2Pixmap(m_showImg);
    }
    printLog("将QPixmap类型图片显示到控件");
    m_item->setPixmap(p_showImg);


    QImage i_showImg;
    if (i_showImg.load(fileName))
    {
        printLog("读取水平分辨率和垂直分辨率");
        dotsPerMeterX = i_showImg.dotsPerMeterX();
        dotsPerMeterY = i_showImg.dotsPerMeterY();
        printLog("dotsPerMeterX="+ QString::number(dotsPerMeterX) + ",dotsPerMeterY="+ QString::number(dotsPerMeterY));
    }
    else
    {
        dotsPerMeterX = 0;
        dotsPerMeterY = 0;
    }
}

如果没有“1、必须载入qjpeg.dll库”载入jpg图片就会失败

dotsPerMeterX = i_showImg.dotsPerMeterX();
dotsPerMeterY = i_showImg.dotsPerMeterY();

dotsPerMeterX和dotsPerMeterY即是水平分辨率和垂直分辨率

3、处理修改一下图片

例如擦除一下图片

printLog("擦除算法");
rectangle(m_showImg, Point(rect.x(),rect.y()), Point(rect.x() + rect.width(), rect.y() + rect.height()), Scalar(0xff,0xff,0xff), -1);
printLog("转换Mat类型为QPixmap类型");
p_showImg = Mat2Pixmap(m_showImg);
printLog("将QPixmap类型图片显示到控件");
m_item->setPixmap(p_showImg);

4、通过QImage设置水平分辨率和垂直分辨率并保存图片

/**
 * @brief 保存图片
 */
void Picture::saveFile()
{
    if (nullptr == m_item)
        return;

    QImage image = m_item->pixmap().toImage();
    if (dotsPerMeterX == 0) {
        dotsPerMeterX = 300 / 0.0254;
        dotsPerMeterY = 300 / 0.0254;
        printLog("获取原来的dpi失败,设置300 dpi");
    }
    image.setDotsPerMeterX(dotsPerMeterX);
    image.setDotsPerMeterY(dotsPerMeterY);
    image.save(m_filePath);
}
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
QT QImage加载图片可以通过以下步骤完成。首先,创建一个QImage对象和一个QLabel对象,然后使用load()函数加载图片文件。可以通过右击工程的图片获取图片路径。接下来,使用setPixmap()函数将QImage对象转换为QPixmap对象,并将其设置为QLabel的显示内容。还可以使用setGeometry()函数设置QLabel相对于父类的位置。最后,使用show()函数显示QLabel。 另外,可以使用QImageReader的方法读取图片。首先设置QImageReader的属性,例如setDecideFormatFromContent()设置是否根据内容自动确定图片格式,setScaledSize()设置图片的大小。然后使用setFileName()函数设置图片的路径。如果可以读取图片,使用read()函数读取图片,并通过QPainter的drawPixmap()函数绘制图片。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [一种QImage加载图片解决方案](https://download.csdn.net/download/fregry10/10685883)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [【QT】添加图片资源并使用QImage加载图片显示](https://blog.csdn.net/weixin_43894927/article/details/107177957)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Qt加载图片图片较大无法正常加载,显示空白处理方法)](https://blog.csdn.net/fhakfs/article/details/124500642)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小言W

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

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

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

打赏作者

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

抵扣说明:

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

余额充值