将模糊滤镜应用于BitmapData

时间:2011-05-14 17:47:01

标签: flex actionscript-3 bitmapdata

这是我用来使用BitmapData模糊图像的代码。该函数在Slider_changeHandler(event:Event):void事件上调用,滑块的值作为blurvalue传递给函数。

问题是功能有效,但似乎是咒语(如果这是正确的单词!),也就是说,假设我将其滑动到最大值,之后尝试通过向前滑动模糊来减少模糊仍在不断增加。如何让它工作,所以当我将它向上滑动模糊增加,当我向后滑动模糊减少,当滑块为0时,不应用模糊。

            var blur:BlurFilter = new BlurFilter();
            blur.blurX = blurvalue; 
            blur.blurY = blurvalue; 
            blur.quality = BitmapFilterQuality.MEDIUM;
            bitmapdata.applyFilter(bitmapdata,new
                Rectangle(0,0,bitmapdata.width,bitmapdata.height),new Point(0,0),
                blur);
            return bitmapdata;

2 个答案:

答案 0 :(得分:5)

如何在应用过滤器的情况下返回原始bitmapData的克隆?

e.g。

var result:BitmapData = bitmapdata.clone();
var blur:BlurFilter = new BlurFilter();
blur.blurX = blurvalue; 
blur.blurY = blurvalue; 
blur.quality = BitmapFilterQuality.MEDIUM;
result.applyFilter(result,new
Rectangle(0,0,bitmapdata.width,bitmapdata.height),new Point(0,0),blur);
return result;

此外,如果您使用的是BlurFilter,则可能需要更大的矩形,具体取决于模糊量。为此,您可以使用generateFilterRect()方法为过滤器获取正确大小的矩形。

答案 1 :(得分:0)

如果我是你,我会把BitmapData放在一个Bitmap对象中,然后添加过滤器:

var bitmap:Bitmap = new Bitmap(bitmapData);
var blur:BlurFilter = new BlurFilter();
blur.blurX = blurvalue; 
blur.blurY = blurvalue; 
blur.quality = BitmapFilterQuality.MEDIUM;
bitmap.filters = [blur];

通过执行此操作(交换过滤器数组),您不会使过滤器累积。