Qt的文档说QImageWriter有一个setCOmpression方法,这个方法取决于所选的图像格式。例如,对于tiff图像,0表示不压缩,1表示LZW压缩。出于同样的原因,我将我的格式设置为dds,然后按如下方式调用此方法;
QImageWriter writer(dir);
writer.setFormat("dds");
writer.setCompression(5);
bool saved = writer.write(image);
image
当然是一个QImage变量。但是我的图像中没有压缩。我使用ImageMagick手动压缩,压缩后的图像尺寸较小。 Qt输出一个dds文件,但它没有被压缩。那么我该如何设置压缩。我选择5作为参数,期望它将压缩级别设置为DXT5。
答案 0 :(得分:3)
在Qt实现保存压缩DDS纹理之前的一个好选择是将SOIL2静态链接到项目中。
您可以将save_image_as_DDS()
功能与QImage
一起使用,如下所示:
QImage *pTexture = [Your initial image]
AtlasTextureType eTextureType = [Your desired image type]
switch(eTextureType)
{
case ATLASTEXTYPE_PNG: {
if(false == pTexture->save("MyTexture.png")) {
Log("failed to generate a PNG atlas", LOGTYPE_Error);
}
} break;
case ATLASTEXTYPE_DTX5: {
QImage imgProperlyFormatted = pTexture->convertToFormat(QImage::Format_RGBA8888);
if(0 == SOIL_save_image_quality("MyTexture.dds",
SOIL_SAVE_TYPE_DDS,
imgProperlyFormatted.width(),
imgProperlyFormatted.height(),
4,
imgProperlyFormatted.bits(),
0))
{
Log("failed to generate a DTX5 atlas", LOGTYPE_Error);
}
} break;
case ATLASTEXTYPE_DTX1: {
QImage imgProperlyFormatted = pTexture->convertToFormat(QImage::Format_RGB888);
if(0 == SOIL_save_image_quality("MyTexture.dds",
SOIL_SAVE_TYPE_DDS,
imgProperlyFormatted.width(),
imgProperlyFormatted.height(),
3,
imgProperlyFormatted.bits(),
0))
{
Log("failed to generate a DTX1 atlas", LOGTYPE_Error);
}
} break;
}
答案 1 :(得分:1)
没有压缩,因为在你正在使用的Qt版本中没有人实现它。如果在最近的Qt中没有实现该功能,请提交功能请求,修补您的Qt副本以添加此功能(可能作为后端),如果最新版本未实现,请提交您的更改以包含在Qt中:)