#blur #gaussian #graphics #stackblur

stackblur-iter

一种快速、迭代的Stackblur正确方法,输出非常平滑且高质量的图像,没有边缘溢出。

7个版本

0.2.0 2022年8月13日
0.1.6 2022年8月13日
0.1.5 2022年7月18日
0.1.3 2022年6月18日

#15 in #blur

Download history 106/week @ 2024-03-13 77/week @ 2024-03-20 140/week @ 2024-03-27 170/week @ 2024-04-03 102/week @ 2024-04-10 96/week @ 2024-04-17 206/week @ 2024-04-24 148/week @ 2024-05-01 269/week @ 2024-05-08 161/week @ 2024-05-15 254/week @ 2024-05-22 156/week @ 2024-05-29 67/week @ 2024-06-05 168/week @ 2024-06-12 137/week @ 2024-06-19 202/week @ 2024-06-26

592 每月下载量

MIT 许可证

45KB
728

一种快速、迭代的Stackblur正确方法,输出非常平滑且高质量的图像,没有边缘溢出。

此包实现了一种调整过的Stackblur算法,需要 radius * 2 + 2 个元素的空间,而不是 radius * 2 + 1,这是为了大大提高视觉质量而进行的小幅权衡。

该算法以迭代器(StackBlur)的形式暴露,可以包装任何其他生成StackBlurrable元素迭代器的迭代器。然后,StackBlur将产生指定半径模糊的元素。

此包的优点

Stackblur基本上是常数时间的。无论半径如何,它总是只对输入迭代器进行一次扫描,并输出相同数量的元素。

此外,它产生的结果与慢速且昂贵的高斯模糊相当。与使用基本滚动平均的盒式模糊不同,Stackblur使用加权平均,其中每个输出像素受到与其最接近的输入的影响更大。

尽管如此,Stackblur与原始的盒式模糊相比表现并不差,与完整的高斯模糊相比则相当便宜,至少对于CPU来说是这样的。此包中的实现可能会击败crates.io上大多数未优化的模糊,以及一些优化的模糊,并且它非常灵活且通用。

有关对Stackblur算法所做的改进的完整说明,请参阅iter模块。

https://user-images.githubusercontent.com/4723091/173788732-2e3e125e-f7b3-4e0f-8582-cc2c148ba437.mp4

(在上面的视频中,stackblur-iter是居中的模糊,而全宽的那个是另一个stackblur包。)

stackblur包的比较

stackblur 存在边缘溢出和灵活性问题。例如,它只能操作32位整数缓冲区,并期望它们是线性ARGB像素的打包。此外,它不能操作缓冲区的二维子切片(如imgref允许此crate这样做),并且它不提供任何流式迭代器或文档。并且它只支持最大255的模糊半径。

用法

除了StackBlurrableStackBlur它们拥有自己的文档外,还有一些辅助函数如blurblur_argb可以用来与2D图像缓冲区交互,因为手动这样做涉及不安全代码(如果你想要无复制)。

更多内容请参阅完整文档

依赖关系

~165–435KB