1个不稳定版本
0.5.1 | 2024年6月14日 |
---|
#183 in 压缩
在 3 个crate中使用了(通过 ira_drum)
185KB
4K SLoC
image_dds
一个库,用于将未压缩的图像数据转换为压缩格式以及从压缩格式转换回来。
示例
提供的示例项目展示了转换函数的基本使用方法。该库还提供了直接操作表面原始字节数据的功能,而不是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 | ✔️ | ✔️ |
特性
支持使用image和ddsfile crate的辅助函数,这些功能通过特性标志启用,默认情况下是开启的。《code>encoding特性默认开启,但在某些目标上如果不需使用,可以禁用以解决编译问题。image crate的默认特性默认禁用。特性是累加的,因此只需在Cargo.toml
中添加适当的image版本引用,即可启用所有默认特性。
构建
使用安装了较新版本Rust工具链的cargo build --release
构建项目。构建支持Windows、Linux和MacOS。由于在intel-tex-rs-2中缺少预编译的ISP内核,某些目标可能无法正确构建。
依赖
~2–11MB
~58K SLoC