1 个不稳定版本

0.1.0 2021年5月3日

#755图像

MIT 许可证

15KB
302

mmpx-rs

这是由Morgan McGuire和Mara Gagiu提出的MMPX图像放大算法的Rust实现。

此算法的所有权利属于作者。

算法

该算法旨在通过测试各种规则来放大像素艺术,针对每个源像素的邻域进行测试,以映射4个结果像素。它借鉴并建立了一些来自最近邻和EPX(其他常见的像素艺术缩放方法)的概念。

该算法提供了基于邻域的模块化规则,这些规则按顺序操作,使得未来可以在此多线程处理“环境”下添加更多规则。

这些规则中的一个关键假设是相邻像素具有相同的RGB值,这意味着非像素艺术风格的图像可能回退到最近邻。

命令行界面

$ cargo install mmpx
$ mmpx input.png --output output.png

Cargo.toml
[dependencies.mmpx]
version = "0.1.0"
main.rs
use mmpx;
use image::RgbaImage;
.
.
.
// Load using image
let image: RgbaImage = image::open(input_path).unwrap().to_rgba8();
// Magnify 2x
let output: RgbaImage = mmpx::magnify(&image);

实现

此实现使用Rust进行内存安全,并使用rayon crate并行处理像素。唯一与作者提供的处理逻辑有意的不同之处在于计算给定像素的亮度。

性能似乎与单线程的C++实现相似,这使得它可能适用于实时渲染。

性能测试很少,可以通过使用与C++版本类似的干图像缓冲区来提高性能。

依赖项

~17MB
~130K SLoC