【以下回答由 GPT 生成】
问题的答案是:当使用QImage::load
加载一张图片时,如果该图片的颜色格式不在QImage支持的范围内,它会自动转换为一个最接近的格式。
在这种情况下,从24位深度(RGB888格式)的图片加载时,它会转换为32位深度(RGB32格式),因为32位深度是QImage支持的格式之一。
在这里,我们可以使用QImageReader
的supportsOption()
函数来检查是否支持RGB888格式,以了解为什么图片不能以原始的格式加载。我们可以使用以下代码进行验证:
QImageReader reader("d:/test.bmp", "BMP");
if (reader.supportsOption(QImageIOHandler::Size)) {
qDebug() << "RGB888 is supported";
} else {
qDebug() << "RGB888 is not supported";
}
如果打印出"RGB888 is not supported",那么说明QImageReader不能直接加载RGB888格式的图片。这也是为什么在使用QImage::load
加载时会自动转换为RGB32格式的原因。
然而,如果我们仍然想保留24位深度(RGB888格式)的图片格式,我们可以使用QImageReader
和QImageWriter
来实现手动加载和保存图片。下面是一段示例代码:
QImageReader reader("d:/test.bmp", "BMP");
reader.setAutoTransform(false);
reader.setDecideFormatFromContent(false);
reader.setPreferredImageFormat(QImage::Format_RGB888);
QImage image2 = reader.read();
image2.save("d:/test2.bmp", "BMP");
在这个示例中,我们禁用了自动变换和自动决定图片格式的功能,并将首选的图片格式设置为RGB888。这样,加载的图片将保持原始的24位深度(RGB888格式)。
总结一下,当直接使用QImage::load
函数加载图片时,如果图片的颜色格式不在QImage支持的范围内,它会自动转换为一个最接近的格式。如果想要手动加载和保存图片时保留原始格式,可以使用QImageReader
和QImageWriter
来实现。
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^