linux Qt 用QImage或者QPixmap加载bmp图像时一直返回false

lixiaoli20072765 2015-01-26 03:39:40
QImage* img=new QImage;
// img->load("./test.bmp");
if(! ( img->load("/mntTest/test.bmp",0) ) ) //加载图像
{
qDebug("-------------------fail-------------------");
}

在Linux系统中, Qt程序使用QImage或者QPixmap加载bmp格式图像一直失败,
报错为:
QImage:scaled: Image is a null image,查资料说这样报错可能是路径有问题,但是相同路径下png
格式的图像加载就是成功的,由于加载图像失败也无法把bmp格式转换为png格式的图像,请各位帮忙看看什么原因,在线等!!!
...全文
1873 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
lixiaoli20072765 2015-01-29
  • 打赏
  • 举报
回复
引用 18 楼 dbzhang800 的回复:
[quote=引用 17 楼 lixiaoli20072765 的回复:] 谢谢各位抽空帮我解答问题,终于发现问题所在,是QT库的问题,QT库中qconfig没有把BMP格式屏掉,屏掉就可以了,在qconfig文件中看到JPEG、PNG都屏掉了,参照屏掉,再重新编译一下就可以支持bmp格式的了!!!
结合你前面的结果。你是说你禁用这些之后,QImageReader::supportedImageFormats (); 返回的列表仍含有 bmp ? 如果如此,仍算是Qt的一个bug[/quote] 不是禁用,而是解禁用吧,我屏蔽掉的是这些, //#ifndef QT_NO_IMAGEFORMAT_BMP //# define QT_NO_IMAGEFORMAT_BMP //#endif 意思是如果没有没定不支持bmp,就定义不支持bmp,我屏蔽掉了,就支持了吧
lixiaoli20072765 2015-01-29
  • 打赏
  • 举报
回复
引用 18 楼 dbzhang800 的回复:
[quote=引用 17 楼 lixiaoli20072765 的回复:] 谢谢各位抽空帮我解答问题,终于发现问题所在,是QT库的问题,QT库中qconfig没有把BMP格式屏掉,屏掉就可以了,在qconfig文件中看到JPEG、PNG都屏掉了,参照屏掉,再重新编译一下就可以支持bmp格式的了!!!
结合你前面的结果。你是说你禁用这些之后,QImageReader::supportedImageFormats (); 返回的列表仍含有 bmp ? 如果如此,仍算是Qt的一个bug[/quote] 是的,禁用之后返回列表仍含有bmp
lixiaoli20072765 2015-01-28
  • 打赏
  • 举报
回复 1
引用 14 楼 u011330815 的回复:
[quote=引用 13 楼 lixiaoli20072765 的回复:] 我这边显示的还是不行哦,显示说是空图像
你看看路径对不对,也有可能是linux下不支持BMP,我也没有试过,能肯定的是windows下是可以的。[/quote] 一开始我也怀疑路径,我用的是绝对路径,而且放在同一路径下的png和jpg都能显示,说明路径肯定没有问题的,现在也怀疑是linux下是不支持bmp
lixiaoli20072765 2015-01-28
  • 打赏
  • 举报
回复
引用 12 楼 dbzhang800 的回复:
很奇怪的现象。bmp是Qt原生支持的图片类型,在不同平台下,Qt内部用的是完全一样的代码。 如果你确定你使用的是绝对路径,而且确定同一张图片,在其他平台下可以打开,但是在你的平台下无法打开,那么这应该就是 QBmpHandler 的一个BUG,你也可以调试程序看看,问题出在 QBmpHandler哪儿
我放在linux下面的文件夹中,samba实现文件共享,在windows下面用Qt就可以显示bmp文件,linux下面却不显示,用的是绝对路径,而且显示的是同一张图片
你的OPPA 2015-01-28
  • 打赏
  • 举报
回复
引用 13 楼 lixiaoli20072765 的回复:
我这边显示的还是不行哦,显示说是空图像
你看看路径对不对,也有可能是linux下不支持BMP,我也没有试过,能肯定的是windows下是可以的。
lixiaoli20072765 2015-01-28
  • 打赏
  • 举报
回复
引用 11 楼 u011330815 的回复:
[quote=引用 10 楼 lixiaoli20072765 的回复:] @u011330815 一开始也以为是图像问题,已经换了好多图像了,凡是bmp的都是失败
我之前显示bmp图片是这样做的: QPixmap *background = new QPixmap(); background->load("E:/image/1.bmp"); *background = background->scaled(background->width(),background->height(),Qt::KeepAspectRatio);//裁剪图片及显示方式 QLabel *label = new QLabel(this); label->setPixmap(*background); 我这样是可以显示的,你看看行不行[/quote] 我这边显示的还是不行哦,显示说是空图像
dbzhang800 2015-01-28
  • 打赏
  • 举报
回复
很奇怪的现象。bmp是Qt原生支持的图片类型,在不同平台下,Qt内部用的是完全一样的代码。 如果你确定你使用的是绝对路径,而且确定同一张图片,在其他平台下可以打开,但是在你的平台下无法打开,那么这应该就是 QBmpHandler 的一个BUG,你也可以调试程序看看,问题出在 QBmpHandler哪儿
你的OPPA 2015-01-28
  • 打赏
  • 举报
回复
引用 10 楼 lixiaoli20072765 的回复:
@u011330815 一开始也以为是图像问题,已经换了好多图像了,凡是bmp的都是失败
我之前显示bmp图片是这样做的: QPixmap *background = new QPixmap(); background->load("E:/image/1.bmp"); *background = background->scaled(background->width(),background->height(),Qt::KeepAspectRatio);//裁剪图片及显示方式 QLabel *label = new QLabel(this); label->setPixmap(*background); 我这样是可以显示的,你看看行不行
lixiaoli20072765 2015-01-28
  • 打赏
  • 举报
回复
@u011330815 一开始也以为是图像问题,已经换了好多图像了,凡是bmp的都是失败
lixiaoli20072765 2015-01-28
  • 打赏
  • 举报
回复
@wenwu1225 我的代码是一直输出 --------------------------------fail--------------------------------------------- 然后按照你的代码,打印的一直是 load image : "/mntTest/0.bmp" fail 还是失败的
dbzhang800 2015-01-28
  • 打赏
  • 举报
回复
引用 17 楼 lixiaoli20072765 的回复:
谢谢各位抽空帮我解答问题,终于发现问题所在,是QT库的问题,QT库中qconfig没有把BMP格式屏掉,屏掉就可以了,在qconfig文件中看到JPEG、PNG都屏掉了,参照屏掉,再重新编译一下就可以支持bmp格式的了!!!
结合你前面的结果。你是说你禁用这些之后,QImageReader::supportedImageFormats (); 返回的列表仍含有 bmp ? 如果如此,仍算是Qt的一个bug
lixiaoli20072765 2015-01-28
  • 打赏
  • 举报
回复
谢谢各位抽空帮我解答问题,终于发现问题所在,是QT库的问题,QT库中qconfig没有把BMP格式屏掉,屏掉就可以了,在qconfig文件中看到JPEG、PNG都屏掉了,参照屏掉,再重新编译一下就可以支持bmp格式的了!!!
lixiaoli20072765 2015-01-27
  • 打赏
  • 举报
回复
原以为是库的原因,查了好多资料,看到别人说linux下面能显示bmp图像,说是linux版本不一样的话可能就能显示,就感觉挺纠结的。bmp图像时自己生成的二维码图像,本来想利用Qt中QPixmap中的save函数把bmp图像另存为其他格式的,但是load加载的时候就已经返回false了,无法转换,看样Qt转换是行不通了,现在也只能用你说的两种方法,要么找个开源库转一下,要么直接生成png格式的,我看生成png格式相关资料比较少
wenwu1225 2015-01-27
  • 打赏
  • 举报
回复
下面是我以前在ubuntu和ARM上测试bmp位图的部分代码,打开和缩放都没有问题,供参考。 void Dialog::on_fileBtn_clicked() { QString filename = QFileDialog::getOpenFileName(this, "Open Bitmap", "./", "*.bmp"); if(filename.isEmpty()) return; // QImage *image = new QImage(filename, "BMP"); // if(image != NULL) QImage *image = new QImage(); if(image == NULL) { qDebug("image is NULL"); return; } if(!image->load(filename)) { qDebug() << "load image : " << filename << " fail"; delete image; return; } ui->bmpLabel->setPixmap(QPixmap::fromImage(image->scaled(100,100))); if(image->format() == QImage::Format_Mono) { qDebug() << "format_mono"; } else if(image->format() == QImage::Format_MonoLSB) qDebug() << "format_monoLSB"; else if(image->format() == QImage::Format_Indexed8) qDebug() << "QImage::Format_Indexed8"; else if(image->format() == QImage::Format_RGB32) qDebug() << "QImage::Format_RGB32"; else if(image->format() == QImage::Format_ARGB32) qDebug("QImage::Format_ARGB32"); else if(image->format() ==QImage::Format_ARGB32_Premultiplied) qDebug("QImage::Format_ARGB32_Premultiplied"); else if(image->format() == QImage::Format_RGB16) qDebug("QImage::Format_RGB16"); else if(image->format() == QImage::Format_ARGB8565_Premultiplied) qDebug("QImage::Format_ARGB8565_Premultiplied"); else if(image->format() == QImage::Format_RGB666) qDebug("QImage::Format_RGB666"); else if(image->format() == QImage::Format_ARGB6666_Premultiplied) qDebug("QImage::Format_ARGB6666_Premultiplied"); else if(image->format() == QImage::Format_RGB555) qDebug("QImage::Format_RGB555"); else if(image->format() == QImage::Format_ARGB8555_Premultiplied) qDebug("QImage::Format_ARGB8555_Premultiplied"); else if(image->format() == QImage::Format_RGB888) qDebug("QImage::Format_RGB888"); else if(image->format() == QImage::Format_RGB444) qDebug("QImage::Format_RGB444"); else if(image->format() == QImage::Format_ARGB4444_Premultiplied) qDebug("QImage::Format_ARGB4444_Premultiplied"); else qDebug("unkown format"); delete image; }
你的OPPA 2015-01-27
  • 打赏
  • 举报
回复
建议你换一张BMP图片试试看,有可能是你的图片有问题
wenwu1225 2015-01-27
  • 打赏
  • 举报
回复
按你上面的代码有输出-------------------fail---------------------------吗?
lixiaoli20072765 2015-01-27
  • 打赏
  • 举报
回复
bmp格式一般有深度为1、8、16、24、32,我把图像保存成对应的bmp格式的都试过了,都不行 bmp保存的头的第0、1字节就是0x42、0x4d,linux下保存的这个bmp我看了一下也是这个格式的,直接可以打开,但是Qt却打不开,我在想是不是跟板子有关系,是不是板子不支持bmp格式的,按理说可能性比较小的把
wenwu1225 2015-01-27
  • 打赏
  • 举报
回复
我以前也遇到过类似问题,bmp格式的位图似乎不止一种存储格式(这方面我没去深入研究了)。 linux Qt似乎打开bmp位图时有更严格的限制,用二进制编辑器打开bmp位图,Qt只能打开第0、1字节为0x42、0x4d的位图。 windows的画图软件保存的文件头是以这两字节开头,但linux下的软件保存的却不一定。
lixiaoli20072765 2015-01-27
  • 打赏
  • 举报
回复
代码中加打印qDebug() << QImageReader::supportedImageFormats (); 返回支持的图像类型包括bmp格式的 ("bmp", "jpeg", "jpg", "png", "xpm") 纠结……
haltwang 2015-01-26
  • 打赏
  • 举报
回复
bmp是windows bitmap 可能就是不支持的。 你是调试的时候就不能加载应该不是库的问题。 打开你的Assistant 查到Qimage 看看说明里支不支持BMP的读写 我现在是windows的懒得切换了 如果不支持,找个开源库把bmp转换为png还是很容易的。 你要感兴趣,自己看下两种的格式,自己就能写代码来转换

16,211

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧