BitmapData.draw clipRect未按预期工作

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并使用矩阵代替吗?

Nox*_*tis 6

一个常见的例程:

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)

解决步骤:

  1. 得到rectangle你要绘制的坐标空间.
  2. 得到单位矩阵,并翻译-rectangle.x,-rectangle.y
  3. 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在这里没有帮助.只有在想要部分绘制某个内容而不是整个剪辑时才使用它.