Qt - 无法将QImage导出到16bit bmp

时间:2015-06-26 11:12:32

标签: qt bmp qimage 16-bit

我创建了一个简单的应用程序,我需要从pixmap导出到16位bmp图像。我有几个pixmap项目所以我有这样的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中的错误?那么如何从像素图中导出16位bmps?

1 个答案:

答案 0 :(得分:0)

事实证明,在将图像保存为bmp之前,Qt强制转换图像。

<强> QT-SRC / SRC / GUI /图像/ 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()