選項一:創建一個由模糊半徑擴展的圖像。所以你做了一些像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.applyFilter
與new BlurFilter(radius, radius)
和調用copyPixels與new Rectangle(radius, radius, src.width, src.height)
,你就完成了。
選項二:如果您的模糊半徑不變,請使用Adobe PixelBender。你可以自己寫模,這不應該很難。
選項三:實現自己的高斯內核 - 這將永遠不會像選項一樣快,但比選項二更快,因爲您總是可以緩衝模糊矩陣的n-1列並計算第n + 1個科拉姆。但是,您可以使用BitmapData.getVector來獲取像素緩衝區,而不是調用getPixel32 repeateadly。
謝謝Joa,我已經實現了你的選項之一。浪費相當多的CPU複製周圍的巨大圖像的渠道,但工程。來自C++我的ActionScript經驗是有限的,但到目前爲止,我發現我付出了很多「漏洞抽象」。即這些庫在他們去的時候都很好,但是一旦你需要實現一些低級別的東西,支持看起來非常麻煩和緩慢。 – BuschnicK
另一種選擇是始終使用較大的BitmapData,這樣您就不會浪費任何資源並根據需要更改UV貼圖。你基本上必須按半徑偏移所有uv座標。 –