Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用QImageWriter压缩DDS图像_C++_Qt_Qimage - Fatal编程技术网

C++ 使用QImageWriter压缩DDS图像

C++ 使用QImageWriter压缩DDS图像,c++,qt,qimage,C++,Qt,Qimage,Qt的文档说明qimagerwriter有一个setCOmpression方法,该方法取决于所选的图像格式。例如,对于tiff图像,0表示不压缩,1表示LZW压缩。同样,我将我的格式设置为dds,然后按如下方式调用此方法 QImageWriter writer(dir); writer.setFormat("dds"); writer.setCompression(5); bool saved = writer.write(image); image当然是一个QImage变量。但是在我的结果图

Qt的文档说明qimagerwriter有一个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。

没有压缩,因为在您使用的Qt版本中还没有人实现它。提交功能请求如果该功能未在最近的Qt中实现,请修补Qt副本以添加该功能(可能作为后端口)如果最新版本没有实现,请提交您的更改以包含在Qt中:)

在Qt实现保存压缩DDS纹理之前,一个好的选择是将SOIL2静态链接到您的项目中

您可以将其
save_image\u 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;
}

这是哪一个版本?@ddriver询问者使用的任何版本:)我们只能在这里猜测。听起来好像你知道特定的版本,但没有说明或暗示。而且它是在一个特定的版本中实现的。我想是措辞的问题;)