使用QimageWriter压缩DDS图像
Compressing DDS images using QImageWriter
qt的文档说qimageWriter具有setCompression方法,并且此方法取决于所选的图像格式。例如,对于TIFF图像,0表示没有压缩,1表示LZW压缩。同样,我将格式设置为DD,然后将此方法称为如下;
QImageWriter writer(dir);
writer.setFormat("dds");
writer.setCompression(5);
bool saved = writer.write(image);
image
当然是一个qimage变量。但是我由此产生的图像没有压缩。我使用ImageMagick手动压缩图像尺寸较低。QT输出DDS文件,但没有压缩。因此,我该如何设置压缩。我选择5作为一个参数,期望它将压缩级别设置为dxt5。
一个不错的选择,直到QT实现保存压缩的DDS纹理是静态地将土壤链接到您的项目中。
https://bitbucket.org/spartanj/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;
}
没有压缩,因为您正在使用的QT版本中没有任何压缩。文件请求如果在最近的QT中未实现该功能,请修补您的QT副本以添加此功能(可能是作为BackPort),如果最新版本未实现该功能,请提交更改以包含在QT中:)
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 平均图像时图像损坏
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- Vulkan验证层不断在VkQueuePresentKHR()上抛出图像布局错误
- 使用FFMPEG将RGB图像序列保存到.mp4时出现问题
- 将RGB图像保存为PPM格式
- 将图像添加到资源文件夹UWP C++
- 彩色图像的卤化物处理平均值
- C++射线示踪剂ppm表示没有足够的数据来显示图像
- 重新定位图像时如何前进到下一个内存块
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- 为什么 BMP 图像上的 imwrite 会卡住/不返回?
- Gstreamer:每 5 秒使用多文件墨水保存图像/jpeg
- 如何使用CImg打开图像?
- opengl SOIL 库仅加载未压缩的 dds 图像
- 使用QimageWriter压缩DDS图像