#dds #image-compression #convert-images #layer #format #surface #run

image_dds__patch

将图像转换为压缩的DDS格式以及从压缩的DDS格式转换回来

1个不稳定版本

0.5.1 2024年6月14日

#183 in 压缩


3 个crate中使用了(通过 ira_drum

MIT 协议

185KB
4K SLoC

image_dds

Latest Version docs.rs

一个库,用于将未压缩的图像数据转换为压缩格式以及从压缩格式转换回来。

示例

提供的示例项目展示了转换函数的基本使用方法。该库还提供了直接操作表面原始字节数据的功能,而不是dds或图像文件。支持浮点数据,如EXR文件或BC6 DDS文件。

cargorun --release --exampleimg2dds image.png out.dds BC3RgbaUnorm
cargorun --release --exampledds2img out.dds out.tiff

cargorun --release --exampleimg2ddsf32 image.exr out.dds
cargorun --release --exampledds2imgf32 out.dds out.exr

图像中的数组层和深度切片应垂直堆叠。这允许创建表面以避免制作额外的副本,因为RGBA数据已经处于所需的布局。

cargorun --release --exampleimg2dds 3d.dds 3d.png
cargorun --release --exampleimg2dds 3d.png out.dds Rgba8Unorm depth

cargorun --release --exampledds2imgf32 cube.dds cube.exr
cargorun --release --exampleimg2ddsf32 cube.exr out.dds BC6hRgbUfloat layers

支持格式

目前仅支持BCN格式,因为这些是DDS文件和压缩GPU纹理常用的格式。该库不支持用于GPU纹理的其他压缩格式,如ETC1。压缩使用intel-tex-rs-2处理C++中Intel的ISPC纹理压缩器的绑定。解压缩使用C语言中bcdec库的安全Rust端口。

格式 编码 解码
BC1 ✔️ ✔️
BC2 ✔️
BC3 ✔️ ✔️
BC4 ✔️ ✔️
BC5 ✔️ ✔️
BC6 ✔️ ✔️
BC7 ✔️ ✔️

也支持一些未压缩的格式。这些格式由DDS支持,但在实际中很少与DDS文件一起使用。未压缩格式通常用于小型纹理或用于窗口表面和UI元素的纹理。

格式 编码 解码
R8 ✔️ ✔️
R8G8B8A8 ✔️ ✔️
B8G8R8A8 ✔️ ✔️
R16G16B16A16Float ✔️ ✔️
R32G32B32A32Float ✔️ ✔️

特性

支持使用imageddsfile crate的辅助函数,这些功能通过特性标志启用,默认情况下是开启的。《code>encoding特性默认开启,但在某些目标上如果不需使用,可以禁用以解决编译问题。image crate的默认特性默认禁用。特性是累加的,因此只需在Cargo.toml中添加适当的image版本引用,即可启用所有默认特性。

构建

使用安装了较新版本Rust工具链的cargo build --release构建项目。构建支持Windows、Linux和MacOS。由于在intel-tex-rs-2中缺少预编译的ISP内核,某些目标可能无法正确构建。

依赖

~2–11MB
~58K SLoC