【问题标题】:QPixmap does not open some imageQPixmap 不打开某些图像
【发布时间】:2015-03-08 14:29:04
【问题描述】:

它会打开一个 JPEG 图像,但不会打开另一个 JPEG。目录和文件存在于我的系统上。为了便于娱乐,下面代码中使用的图像是console testf2

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

using namespace std;

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    QPixmap *pixmap = new QPixmap;

    pixmap->load("C:/Programs/console test.jpg");
    if(pixmap->isNull())
        cout << "darn" << endl;
    else
        cout << "not null" << endl;

    pixmap->load("C:/Programs/f2.jpg");

    if(pixmap->isNull())
        cout << "darn" << endl;
    else
        cout << "not null" << endl;

    return a.exec();
}

上面的代码打印出来

darn
not null

如果相关,该应用程序是一个 QWidget 应用程序。

【问题讨论】:

  • 我知道在 2015 年这样说很蠢,但是如果你把第一个名字中的空格去掉会怎样?
  • 我用下划线替换了空格,它仍然存在。它与文件本身(我推断)有关,与文件名无关。如果它意味着什么,ifstream 会毫无问题地打开并写入文件。
  • 您是否尝试过使用可选参数强制它以特定格式加载?
  • console test.jpg 实际上是一个 PNG 文件。
  • @Tay2510 根据规范。 PNG 数据流的前 8 个字节始终包含以下(十进制)值:137 80 78 71 13 10 26 10。这里 80 78 71 是 'P'、'N'、'G' 的 ASCII 码。

标签: c++ qt null qpixmap


【解决方案1】:

console test.jpg 实际上是一个 PNG 文件。 – Oktalist

Oktalist 回答了这个问题。我天真地使用并将扩展名从 png 更改为 jpg 期望文件转换。用同样的方法撤消更改后,图像成功打开。

ifstream src("console print.jpg", ios::binary);
ofstream dest("console print.png", ios::binary);
dest << src.rdbuf();
dest.flush();

现在控制台打印具有正确的文件扩展名。它打开了。有十亿其他方法可以做到这一点,但这个很简单。

-桑弗

【讨论】:

  • 这没有回答问题。只有问题的完整解决方案才能作为答案发布。如果您有其他信息,请发表评论或更新您的问题。
猜你喜欢
  • 1970-01-01
  • 2019-10-07
  • 1970-01-01
  • 2017-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多