【问题标题】:Qt - Cannot export QImage to 16bit bmpQt - 无法将 QImage 导出到 16 位 bmp
【发布时间】:2015-09-13 07:44:11
【问题描述】:

我创建了一个简单的应用程序,我需要从像素图导出到 16 位 bmp 图像。我有几个像素图项目,所以我有这样的 for 循环,我首先创建 QImage 并将其转换为 Format_RGB16

    for(QList<image_handler * >::iterator it=imageItems->begin(); it!=imageItems->end(); it++)
    {
        ...
        // image_handler inherits QPixmap
        QFile export_image(path+"/img_"+code+".bmp");

        QImage export_img = (*it)->toImage().convertToFormat(QImage::Format_RGB16);
        export_img.save(&export_image, "BMP");
        ...
    }

image_handler 是我的自定义 QPixmap。图像以给定的路径导出,文件名正确。但是,当我查看文件的属性(在 Windows 中)时,我可以看到图像深度是 24 位的。不幸的是,我需要它们是 16 位的。

我在这里做错了什么?或者这是Qt中的一个错误?那么如何从 pixmap 导出 16 位 bmps 呢?

【问题讨论】:

  • bool QImage::save ( const QString &amp; fileName, const char * format = 0, int quality = -1 ) const
  • 使用 QString 提供路径没有帮助。仍然获得 24 位 bmp 图像。

标签: qt bmp qimage 16-bit


【解决方案1】:

事实证明,Qt 强制转换图像,然后将其保存为 bmp。

qt-src/src/gui/image/qbmphandler.cpp:777

bool QBmpHandler::write(const QImage &img)
{
    QImage image;
    switch (img.format()) {
    case QImage::Format_ARGB8565_Premultiplied:
    case QImage::Format_ARGB8555_Premultiplied:
    case QImage::Format_ARGB6666_Premultiplied:
    case QImage::Format_ARGB4444_Premultiplied:
        image = img.convertToFormat(QImage::Format_ARGB32);
        break;
    case QImage::Format_RGB16:
    case QImage::Format_RGB888:
    case QImage::Format_RGB666:
    case QImage::Format_RGB555:
    case QImage::Format_RGB444:
        image = img.convertToFormat(QImage::Format_RGB32);
        break;
    default:
        image = img;
    }
    ...

因此,如果您需要保存 bmp 16bit,则必须手动完成,填充标题并使用 QImage::bits()QImage::byteCount()

【讨论】:

  • 嗯,看来我真的没有别的选择,只能手动操作。你知道他们为什么要转换回来吗?
  • @Gresthorn 我只能假设...保存 32 位 bmp 可能更容易吗?不过不确定...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-23
  • 1970-01-01
  • 2013-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多