【问题标题】:Actionscript BlurFilter wrap aroundActionscript BlurFilter 环绕
【发布时间】:2010-12-31 02:14:44
【问题描述】:

我正在使用标准的 ActionScript 模糊滤镜来模糊图像。该图像稍后将用作圆柱体上的纹理贴图,即它的左右边缘将在 3D 中相遇。这看起来很糟糕,因为模糊滤镜在图像边缘有不连续性。我想将其设置为环绕图像,这样它就不会截断过滤器内核,而是执行模运算以从另一端获取像素。这可能吗?

如果不是 - 在 ActionScript 中自己编写此类函数的最佳方式是什么?我想使用 getPixel32 和 setPixel32 对于较大的图像会非常慢?

【问题讨论】:

    标签: actionscript-3 flash filter bitmapdata texture-wrapping


    【解决方案1】:

    选项一:创建一个由模糊半径扩展的图像。因此,您执行buffer = new BitmapData(src.width + 2 * radius, src.height + 2 * radius, src.transparent, 0) 之类的操作,然后将 src 绘制到缓冲区上,并使用半径转换的矩阵。比如m = new Matrix(),然后是m.translate(radius, radius),最后是buffer.draw(src, m),现在你只需要用new BlurFilter(radius, radius)调用buffer.applyFilter,用new Rectangle(radius, radius, src.width, src.height)调用copyPixels就可以了。

    选项二:如果您的模糊半径不变,请使用 Adob​​e PixelBender。您可以自己编写模数,这应该不难。

    选项三:实现您自己的高斯核——这永远不会像选项一那样快,但比选项二快,因为您始终可以缓冲矩阵的 n-1 列进行模糊处理,然后只计算第 n+1 列.但是,您将使用 BitmapData.getVector 获取一次像素缓冲区,而不是重复调用 getPixel32。

    【讨论】:

    • 谢谢 Joa,我已经实现了您的选项一。复制大量图像的通道会浪费大量 CPU,但可以。来自 C++ 的我的 ActionScript 经验是有限的,但到目前为止,我发现我为“泄漏抽象”付出了很多。 IE。这些库就它们而言都很好,但是一旦您需要实现一些低级别的东西,支持似乎非常麻烦和缓慢。
    • 另一种选择是始终使用较大的 BitmapData,这样您就不会浪费任何资源并相应地更改您的 UV 贴图。您基本上必须按半径偏移所有 uv 坐标。
    猜你喜欢
    • 1970-01-01
    • 2013-12-24
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    相关资源
    最近更新 更多