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格式的图像,请各位帮忙看看什么原因,在线等!!!
------解决思路----------------------
bmp是windows bitmap
可能就是不支持的。
你是调试的时候就不能加载应该不是库的问题。
打开你的Assistant 查到Qimage 看看说明里支不支持BMP的读写
我现在是windows的懒得切换了
如果不支持,找个开源库把bmp转换为png还是很容易的。
你要感兴趣,自己看下两种的格式,自己就能写代码来转换
------解决思路----------------------
我以前也遇到过类似问题,bmp格式的位图似乎不止一种存储格式(这方面我没去深入研究了)。
linux Qt似乎打开bmp位图时有更严格的限制,用二进制编辑器打开bmp位图,Qt只能打开第0、1字节为0x42、0x4d的位图。
windows的画图软件保存的文件头是以这两字节开头,但linux下的软件保存的却不一定。
------解决思路----------------------
按你上面的代码有输出-------------------fail---------------------------吗?
------解决思路----------------------
建议你换一张BMP图片试试看,有可能是你的图片有问题
------解决思路----------------------
下面是我以前在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;
}
------解决思路----------------------
我之前显示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);
我这样是可以显示的,你看看行不行
------解决思路----------------------
很奇怪的现象。bmp是Qt原生支持的图片类型,在不同平台下,Qt内部用的是完全一样的代码。
如果你确定你使用的是绝对路径,而且确定同一张图片,在其他平台下可以打开,但是在你的平台下无法打开,那么这应该就是 QBmpHandler 的一个BUG,你也可以调试程序看看,问题出在 QBmpHandler哪儿
------解决思路----------------------
你看看路径对不对,也有可能是linux下不支持BMP,我也没有试过,能肯定的是windows下是可以的。