2个不稳定版本
0.5.0-rc0 | 2024年4月7日 |
---|---|
0.4.0 | 2023年11月12日 |
#7 in #hdr
761 每月下载量
在 2 crates 中使用
130KB
2K SLoC
zune-hdr
快速、小巧、通用的hdr解码器和编码器
此crate包含一个小巧且快速的辐射度(.hdr)解码器和编码器。
用法
要使用此crate,请将 zune-hdr
添加到您的 Cargo.toml
或运行 cargo add zune-hdr
以下是加载hdr图像的示例
use std::error::Error;
use std::fs::read;
use zune_hdr::HdrDeocder;
fn main() -> Result<(), Box<dyn Error>> {
let contents = read("file.hdr")?;
let data = HdrDecoder::new(contents);
let pix: Vec<f32> = data.decode()?;
println!("first pix:{}", pix[0]);
}
以下是写入hdr的示例,这将生成一个黑色图像
use zune_hdr::HdrEncoder;
use zune_core::options::EncoderOptions;
fn main() -> Result<(), Box<dyn Error>> {
let w = 100;
let h = 100;
let comp = 3;
let in_size: Vec<f32> = vec![0.0; w * h * comp];
// setup options, we specify width and height here which are needed, colorspace must always
// be rgb and the depth is f32,
let encoder_opts = EncoderOptions::new(w, h, ColorSpace::RGB, BitDepth::Float32);
let encoder = HdrEncoder::new(&in_size, encoder_opts);
encoder.encode()?;
}
性能
此crate拥有优化的解码器,其速度比 image-rs/hdr
解码器快约2.5倍,以下是在以下 图像 上的基准运行
可以使用以下方式复制
git clone
cd ./zune-image
cargo bench --workspace "hdr"
格式化输出
字段 | image-rs/hdr | zune-hdr |
---|---|---|
时间 | 16.561 ms | 6.4180 ms |
thrpt | 77.363 MiB/s | 199.63 MiB/s |
原始criterion输出
Running benches/decode_hdr.rs (deps/decode_hdr-b0d728bd626a2ee2)
hdr: Simple decode(memorial-hdr)/image-rs/hdr
time: [16.542 ms 16.561 ms 16.581 ms]
thrpt: [77.271 MiB/s 77.363 MiB/s 77.454 MiB/s]
hdr: Simple decode(memorial-hdr)/zune-image/hdr
time: [6.3522 ms 6.4180 ms 6.4848 ms]
thrpt: [197.58 MiB/s 199.63 MiB/s 201.70 MiB/s]
安全性
此crate已经经过大量模糊测试,并且CI每天都会进行模糊测试以捕获意外的错误
此crate不使用 unsafe
并使用 #[forbid(unsafe)]
以防止任何错误悄悄进入