在下面的示例中,我使用行笔划的位图绘制画布。当我释放鼠标按钮时,我查询 drawHolder 以获取其图形内容,并使用 readGraphicsData 将结果保存在变量结果供以后使用。
当我按下绿色按钮时,我将结果矢量提交到 copyHolder 以使用 drawGraphicsData 方法渲染形状。
这是事情变得有趣的地方:如果你看一下 pic2 , copyHolder 包含 copyHolder 边界之外的其他图形内容。我认为问题出在 drawGraphicsData ,因为我查看了结果向量的内容,似乎它包含一些额外的 GraphicsPath 实例
你能想到一个解决方案如何使用掩码删除/隐藏这些exta路径没有吗?
var result:Vector.<IGraphicsData > ;
loadBtn.addEventListener(MouseEvent.CLICK,loadData);
var bitmapData:BitmapData = new (getDefinitionByName(String("myBitmapData"))) as BitmapData;
stage.addEventListener(MouseEvent.MOUSE_DOWN,onMouseDown);
stage.addEventListener(MouseEvent.MOUSE_UP,onMouseUp);
function onMouseDown(e:MouseEvent)
{
drawHolder.graphics.lineStyle(20);
drawHolder.graphics.lineBitmapStyle(bitmapData, null, false, true);
drawHolder.graphics.moveTo(mouseX - drawHolder.x, mouseY - drawHolder.u);
addEventListener(Event.ENTER_FRAME,onEnterFrame);
}
function onMouseUp(e:MouseEvent)
{
removeEventListener(Event.ENTER_FRAME,onEnterFrame);
result = drawHolder.graphics.readGraphicsData(false);
}
function onEnterFrame(e:Event)
{
drawHolder.graphics.lineTo(mouseX - drawHolder.x, mouseY - drawHolder.y);
}
function loadData(e:MouseEvent)
{
copyHolder.graphics.clear();
copyHolder.graphics.drawGraphicsData(result);
}
答案 0 :(得分:0)
首先,你的代码中有一个拼写错误,它说&#34; drawHolder.u&#34;而不是&#34; drawHolder.y&#34;在onMouseDown()
。我认为这是对额外线条的回应,因为你moveTo()
做错了坐标。第二,在readGraphicsData()
结果手册中提到了额外的元素:
&#34;虽然原始矢量内容是使用drawGraphicsData()方法绘制的,但readGraphicsData()方法检索的矢量数据对象与传入drawGraphicsData()方法的矢量数据对象并不完全匹配。例如,结果数据包括GraphicsSolidFill和GraphicsEndFill命令,这两个命令都隐含但实际上不存在于原始图形数据中。&#34;
还值得注意的是readGraphicsData
返回相对于舞台的值,而不是要查询的图形的父DisplayObject
。在复制图形内容之前,请考虑更改源位置和变换。