sha*_*hat 3 flash actionscript-3 bitmapdata
我有一个包含4层的组件:(按升序排列)bgImage:Sprite,dropZone:Sprite,dropMask:Sprite和line:Sprite.bgImage为0,0,其他对象放置在各种正坐标处.dropMask正在屏蔽dropZone.
在位图捕获点我想只从dropZone和dropMask层绘制,所以我在尝试这个:
removeChild(bgImage);
removeChild(line);
var bmd:BitmapData = new BitmapData(dropMask.width,dropMask.height,true,0);
bmd.draw(this,null,null,null,dropMask.getBounds(this));
Run Code Online (Sandbox Code Playgroud)
尽管dropMask位于50,60,但捕获总是从0,0开始.我也试过获得边界矩形并强制x,y,但它没有区别.我在这里做错了什么,我应该忘记clipRect并使用矩阵代替吗?
一个常见的例程:
var rect:Rectangle = dropMask.getRect(dropMask.parent);
var matrix:Matrix = new Matrix();
matrix.translate(-rect.x, -rect.y);
var bmp:BitmapData = new BitmapData(rect.width, rect.height, false, 0xFFFF0000);
bmp.draw(dropMask.parent, matrix);
Run Code Online (Sandbox Code Playgroud)
解决步骤:
rectangle
你要绘制的坐标空间.-rectangle.x
,-rectangle.y
draw()
通话中使用此矩阵.在第1步中,您甚至可能会遇到类似的情况:
import flash.display.Sprite;
var test:Sprite = new Sprite();
test.graphics.beginFill(0, 1);
test.graphics.drawCircle(125, 234, 100);
test.graphics.endFill();
// we are going to draw test, so we get a rectangle
// in its own coordinate space to deal with registration point offset
var rect:Rectangle = test.getRect(test);
var matrix:Matrix = new Matrix();
matrix.translate(-rect.x, -rect.y);
var bmp:BitmapData = new BitmapData(rect.width, rect.height, false, 0xFFFF0000);
bmp.draw(test, matrix);
// see if we are done
addChild(new Bitmap(bmp));
Run Code Online (Sandbox Code Playgroud)
当我编写使用大量绘图剪辑的东西时,我创建一个矩阵并每次重复使用它,matrix.identity();
重置变换.无需为每个图纸创建新矩阵.
编辑不,clipRect在这里没有帮助.只有在想要部分绘制某个内容而不是整个剪辑时才使用它.