0

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

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

4

1 回答 1

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)现在你只需要调用buffer.applyFilternew BlurFilter(radius, radius)调用 copyPixelsnew Rectangle(radius, radius, src.width, src.height)就可以了。

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

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

于 2009-12-30T13:14:31.227 回答