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
592 每月下载量
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的模糊半径。
用法
除了StackBlurrable
和StackBlur
它们拥有自己的文档外,还有一些辅助函数如blur
和blur_argb
可以用来与2D图像缓冲区交互,因为手动这样做涉及不安全代码(如果你想要无复制)。
更多内容请参阅完整文档。
依赖关系
~165–435KB