2个版本
0.1.1 | 2022年9月13日 |
---|---|
0.1.0 | 2022年9月13日 |
#8 in #warcraft
165KB
4K SLoC
此crate提供了用于Blizzard BLP纹理格式的解码/编码,该格式在多个游戏(如魔兽III和魔兽世界)中使用。您可以将任何BLP文件加载到来自image crate的DynamicImage,并将任何DynamicImage保存为BLP文件。
用法
此crate位于crates.io,您可以通过在项目的Cargo.toml中将image-blp添加到依赖项中来使用它。
[dependencies]
image-blp = "1"
示例:加载
该crate将BLP文件的加载分为解析和转换。这样可以处理BLP文件而不会因不必要的转换而丢失信息。将BLP图像加载到可用的RGBA图像中的典型方法如下
let blp_file = load_blp(blp_filename).expect("loaded blp");
let mipmap_level = 0;
let image = blp_to_image(&blp_file, mipmap_level).expect("converted");
请参阅完整的代码示例examples/load.rs。
示例:保存
该crate提供了一个简化的API来指定您想使用的BLP类型。有关更多信息,请参阅convert::BlpTarget类型。以下是将图像保存为BLP的典型方法
let img_file: DynamicImage = Reader::open(input_filename)
.expect("open")
.decode()
.expect("decode");
let make_mipmaps = true;
let blp = image_to_blp(
img_file,
make_mipmaps,
BlpTarget::Blp1(BlpOldFormat::Raw1 {
alpha_bits: AlphaBits::Bit1,
}),
FilterType::Nearest,
)
.expect("converted");
save_blp(&blp, output_filename).expect("saved");
请参阅完整的代码示例examples/save.rs。
CLI工具
该库用于构建通用的CLI工具blp-conv,它允许将图像转换为/从BLP格式转换为广泛的图像格式。您可以通过以下方式安装它
cargo install blp-conv
功能
该crate支持所有已知的BLP版本,如
BLP0
-- 用于旧版魔兽III ROC Beta构建。BLP1
-- 常用于魔兽III TFT。BLP2
-- 用于魔兽世界。
该crate还支持所有已知的编码
RAW1
-- 256色的调色板图像。我们使用color_quant包将通用图像压缩到该格式。RAW3
-- 与普通的 RGBA 位图类似。JPEG
-- 普通的 jpeg 压缩图像。DXTn
-- 用于BLP2
版本的 S3TC 压缩算法。我们使用 texpresso 进行压缩/解压缩。
测试
库的测试使用暴雪游戏的原文件。因此,由于版权问题,它们不能与库一起分发。您应该购买原始游戏以提取测试文件。
依赖项
~20–30MB
~268K SLoC