Qt:以预期的压缩格式保存图像

Qt:以预期的压缩格式保存图像,qt,qml,png,jpeg,image-compression,Qt,Qml,Png,Jpeg,Image Compression,我正在使用Qt并从QMLUI项中保存图像文件。以下是我所做的 auto screenshot = quick_item->grabToImage(); screenshot->saveToFile("/somepath/filename.jpeg"); // OR sometimes use like png like screenshot->saveToFile("/somepath/filename.png"); 这在所有平台上都非常有效。我打开文件,图像按预期保存 现在

我正在使用
Qt
并从
QML
UI项中保存图像文件。以下是我所做的

auto screenshot = quick_item->grabToImage();
screenshot->saveToFile("/somepath/filename.jpeg");
// OR sometimes use like png like
screenshot->saveToFile("/somepath/filename.png");
这在所有平台上都非常有效。我打开文件,图像按预期保存

现在我的问题是:
我刚才提到了
.jpeg
作为文件扩展名,同时将文件名作为param提供给
saveToFile
。这是可行的,但是,我是否需要使用
QImageWriter
来确保图像实际以
jpeg
/
png
格式压缩

当它是有损压缩(如
jpeg
)时会发生什么情况?

如何控制有损压缩如果我喜欢android,我可以做一个
图像压缩(CompressFormat.JPEG,80,stream)
其中80是有损压缩?

你不能直接从
QQuickItemGrabResult
中进行压缩,你必须使用:

auto screenshot = quick_item->grabToImage();
auto image = screenshot->image();
image.save("/somepath/filename.jpeg", nullptr, 80);
save的第二个参数是格式,但它可以保留为null,然后根据文件扩展名猜测,第三个参数是压缩质量


如果使用无损格式(如png),则质量因子无效。您可以将其设置为
-1
(默认值),省略参数或使用用于有损格式的因子。

您不能直接从
QQuickItemGrabResult
执行此操作,您必须使用:

auto screenshot = quick_item->grabToImage();
auto image = screenshot->image();
image.save("/somepath/filename.jpeg", nullptr, 80);
save的第二个参数是格式,但它可以保留为null,然后根据文件扩展名猜测,第三个参数是压缩质量


如果使用无损格式(如png),则质量因子无效。您可以将其设置为
-1
(默认值),省略参数或使用用于有损格式的因子。

。如果我也要保存像
png
这样的无损格式,我需要这样做吗?这也是我问题的一部分,看起来像
QImage::Format::
我可以输入,而不是
nullptr
有大量的格式选择?我应该选择什么?我正在保存一个图像,这是一个有很多颜色的彩色图像&我希望所有的颜色都显示为它is@HAL9000-我编辑了我的答案。另外,
QImage::Format
是关于图像格式的,而不是像jpeg或png这样的文件格式。该图像具有您不需要更改的图像格式。您可以放置的文件格式(而不是
nullptr
是这些格式的名称,如
“PNG”
“JPEG”
),如下所述:
屏幕截图->保存文件(“/somepath/filename.PNG”)
也在工作,正如我在问题中所说的那样。我打开保存的文件&它包含数据很好,如果在使用.png作为文件扩展名时不按照您的方式拍摄图像并调用save,我会失去什么?什么都没有
screenshot->saveToFile(“/somepath/filename.png”)
执行与
screenshot->image().save(“/somepath/filename.png”)
相同的操作。文件格式是不需要的,因为它可以由png扩展猜测,而质量因子是没有用的,因为它是无损的。如果我也要保存像
png
这样的无损格式,我需要这样做吗?这也是我问题的一部分,看起来像
QImage::Format::
我可以输入,而不是
nullptr
有大量的格式选择?我应该选择什么?我正在保存一个图像,这是一个有很多颜色的彩色图像&我希望所有的颜色都显示为它is@HAL9000-我编辑了我的答案。另外,
QImage::Format
是关于图像格式的,而不是像jpeg或png这样的文件格式。该图像具有您不需要更改的图像格式。您可以放置的文件格式(而不是
nullptr
是这些格式的名称,如
“PNG”
“JPEG”
),如下所述:
屏幕截图->保存文件(“/somepath/filename.PNG”)
也在工作,正如我在问题中所说的那样。我打开保存的文件&它包含数据很好,如果在使用.png作为文件扩展名时不按照您的方式拍摄图像并调用save,我会失去什么?什么都没有
screenshot->saveToFile(“/somepath/filename.png”)
执行与
screenshot->image().save(“/somepath/filename.png”)
相同的操作。文件格式是不需要的,因为它可以由png扩展猜测,而质量因子是没有用的,因为它是无损的。