添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

今天无意中发现一张图片在qt程序中出现问题,QPixmap加载jpg图片后执行save操作,返回失败了,失败原因不知道,往前追踪,发现new QPixmap(imagePath)后判断isNull()直接返回true,也就是加载的时候就已经失败了,但是从windows的资源管理中查看分明就是一张正常的图片。图片查看器也能正常打开它。偶然灵光一闪,将他的后缀改为了.png,突然就没问题了。想必QT依赖后缀名动态使用qjpeg.dll等动态库解析图片。于是写了一段兼容处理的代码

QPixmap* getRealPixmap(QString filePath){
    QPixmap *pPixmap = new QPixmap(filePath);
    if(!pPixmap->isNull()){
        return pPixmap;
    }else{
        delete pPixmap;
        pPixmap = nullptr;
    QImageReader reader(filePath);
    reader.setDecideFormatFromContent(true);
    if(reader.canRead())
        QImage image;
        if(reader.read(&image))
            pPixmap = new QPixmap(QPixmap::fromImage(image));
            CLog::log(QString("read %1 success").arg(filePath), LOG_PARAM);
            CLog::error(QString("read %1 return false [%2]")
                        .arg(filePath).arg(reader.errorString()), LOG_PARAM);
        CLog::error(QString("%1 canRead return false").arg(filePath), LOG_PARAM);
    return pPixmap;

先直接new出一个QPixmap,如果isNull()为true,就是解析失败了,再用QImageReader解析

今天无意中发现一张图片在qt程序中出现问题,QPixmap加载jpg图片后执行save操作,返回失败了,失败原因不知道,往前追踪,发现new QPixmap(imagePath)后判断isNull()直接返回true,也就是加载的时候就已经失败了,但是从windows的资源管理中查看分明就是一张正常的图片。图片查看器也能正常打开它。偶然灵光一闪,将他的后缀改为了.png,突然就没问题了。想必QT依赖后缀名动态使用qjpeg.dll等动态库解析图片。于是写了一段兼容处理的代码QPixmap* getRe
测试QLayout和QLabel图片的demo MyDebug << "label1->size" << label1->size(); QString path = QCoreApplication::applicationDirPath(); path = QFileDialog::getOpenFileName(this, "open image", path, tr("Images (*.png *.xpm *.jpg)")); QPixmap pixmap(path); MyDebug << "pixmap.size = " << pixmap.size(); //pixmap = pixmap.scaled(label1->size());//没有考虑QLabel的线宽,导致label1比图片前大了两个线宽 pixmap = pixmap.scaled(label1->width()-label1->lineWidth()*2, label1->height()-label1->lineWidth()*2); label1->setPixmap(pixmap); MyDebug << "label1->size" << label1->size(); MyDebug << "pixmap.size = " << pixmap.size();
我用Qimage读取两张jpg图片(2.jpg和00001.jpg)方式如下: QImage qimg; qimg.load(strStartPath);// strStartPath为图片完整路径 结果发现入2.jpg正常,但入00001.jpg后,qimg为null 经过后来对比两张图片的二进制文件之后发现00001.jpg其实不是jpg格式的图片,而是PNG图片,如下图: 所以解决方法如下: QFile file(strStartPath); file.open(QIODevice::Read
在ARM开发板上运行的Qt程序可以很好的支持png格式,但唯一的问题是,png格式的图像太大了,这对于资源有限的嵌入式系统来说绝对是一个不容忽视的问题。解决方法之一就是改用jpg格式的图像,但是在这之前,你还需要完成以下工作。 在移植Qt到ARM开发板时,有一个编译参数一般设置为-qt-libjpeg,显而易见,这个参数与显示jpg图像有关。以下叙述的一切内容,都以在移植Qt时设置了这样一个参数
其中image是QImage类型的对象,了一个名为为1.svg的图片,当调用save时,返回值始终是false。感觉svg类型的图片不能用QImage类的save保存,通过述代码保存可以成功: QSvgGenerator generator; generator.setFileName(qsSaveFilePath)
处理jpg图片后保持图片dpi1、必须入qjpeg.dll库2、QImage通过load图片并读取水平分辨率和垂直分辨率3、处理修改一下图片4、通过QImage设置水平分辨率和垂直分辨率并保存图片 1、必须入qjpeg.dll库 #include "mainwindow.h" #include <QApplication> #include "src/utils/utils.h" int main(int argc, char *argv[]) printLog("入q
http://blog.csdn.net/ibingow/article/details/7882098 qmake 工程中的写法:     QMAKE_LFLAGS += -Wl,-rpath,\'\$\$ORIGING\'       QMAKE_RPATHDIR += :\'\$\$ORIGING\'    注意QMAKE_RPATHDIR最开始
未打包成exe,但依旧可以解决。 将文件夹 anaconda/envs/name/libs/site-packages/PySide2/plugins(不是 plugins/imageformats!),复制到某个指定位置(我复制到main.py同目录下,当然哪里都可以),然后在调用 QApplication 之前,上代码,如下: if __name__ == '__main__': import sys import os from PySide2.QtWidgets im
目前对应用实现截屏的方法还是比较多的,首先我们要了解Qt中的窗口的是如何设计的,不管是MFC下的窗口,还是其他窗口,仿佛都相似,曾经狂学MFC,结果毕业一次没用过已经还给老师,悲催,好了下面我们来介绍一下Qt的窗口设计吧!鸡冻吧…. 1.首先我们来看看我从手册上盗取的图片,哦!NO,是借用。 我们了解了Qt的窗口框架,让我们来看看她(羞涩的小菇凉,想多了….)提供的几个函数吧!   Qt某小项目开发。开发环境为windows+Qt 4.7.0+vs2008+mysql 5 ,客户部署环境为Solaris10。 二 问题描述  Qt在widget界面上绘图,可以将界面绘制的图像保存到用户指定的位置。用户通过保存文件对话框选择要保存图片的路径。在开发环境中,即在windows下保存图片功能可用,到了solaris下却不能实现保存图片这个功能。 三 问题分
QScreen *screen_test = QGuiApplication::primaryScreen(); 获取截图,可以自定义起始点和宽高,获取界面自己需要的部分,宽高-1是获取整个 QPixmap pixmap_test = screen_test->grabWindow(this->winId(),0,0,-1,-1); 保存图片,路径要双斜杠,且已存在,(路径如果不存在,不会自动创建文件夹,截图失败) pixmap_test.sa QByteArray imageData; // 假设这里是JPG数据 QImage image; image.loadFromData(imageData, "JPG"); // JPG数据到QImage中 QString fileName = "image.jpg"; // 保存的文件名 if(image.save(fileName, "JPG")) { qDebug() << "保存成功!"; } else { qDebug() << "保存失败!"; 上述代码中,首先将JPG数据到QImage中,然后将QImage保存到本地文件中。需要注意的是,保存的文件格式要与数据时指定的格式相同,否则保存失败