Joh*_*ley 1 flash bitmap filter actionscript-3 bitmapdata
我使用以下代码在图像上添加了黑白滤镜:
var n:Number = 1/3;
var matrix:Array = [n,n,n,0,0,
n,n,n,0,0,
n,n,n,0,0,
0,0,0,1,0];
var cmf:ColorMatrixFilter = new ColorMatrixFilter(matrix);
_bitmap.bitmapData.applyFilter(_buffer, _sourceRect, new Point(), cmf);
Run Code Online (Sandbox Code Playgroud)
我现在希望能够删除此过滤器,但我似乎无法弄清楚如何.我已经读过,如果我清除_bitmap.filters数组,它应该被删除,但是当我检查时,这个数组是空的.
有没有人对我怎么做这个有什么建议?
编辑 我正在使用FlashPunk游戏引擎,我正在操作Image.as类中的bitmapData.我的所有代码都是使用FlashDevelop编写和编译的.
编辑
由于flashpunk flashpunk引擎中的图像类使用bitmapData.CopyPixels()函数绘制位图,因此我无法将过滤器直接应用于位图.过滤器未应用于bitmapData,因此未绘制.
我已经更改了render方法以使用bitmapData.draw()函数,该函数使用实际的位图来绘制图像.
我现在可以通过执行以下操作向我的位图添加过滤器:
_bitmap.filters = [ColorMatrixFilter];
Run Code Online (Sandbox Code Playgroud)
然后我可以通过执行以下操作删除我的过滤器:
_bitmap.filter = [];
Run Code Online (Sandbox Code Playgroud)
当您将Filter直接应用于位图数据时,您无法将其删除,因为过滤器最终会修改像素颜色,但是,您可以尝试通过执行反向操作来还原它:
var matrix:Array = [1/n,1/n,1/n,0,0,
1/n,1/n,1/n,0,0,
1/n,1/n,1/n,0,0,
0,0,0,1,0];
Run Code Online (Sandbox Code Playgroud)
如果您希望能够删除动态过滤器,则必须将它们应用于位图对象而不是BitmapData对象.然后你可以_bitmap.filters = [];删除所有过滤器
这是一个示例,显示如何在4秒后删除过滤器:
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.filters.ColorMatrixFilter;
import flash.utils.setTimeout;
public class TestTextfield extends Sprite
{
public function TestTextfield()
{
var bd1 : BitmapData = new BitmapData(300,300);
var randomNum:Number = Math.floor(Math.random() * 10);
bd1.perlinNoise(100, 80, 6, randomNum, false, true, 1, true, null);
var n:Number = 1/3;
var matrix:Array = [n,n,n,0,0,
n,1,n,0,0,
n,1,n,0,0,
0,0,0,1,0];
var cmf:ColorMatrixFilter = new ColorMatrixFilter(matrix);
var bitmap : Bitmap = new Bitmap(bd1);
bitmap.filters = [cmf];
addChild(bitmap);
setTimeout(function():void{
bitmap.filters = [];
}, 4000);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2449 次 |
| 最近记录: |