使用图形绘制多次并存储到同一位图

时间:2012-12-12 13:10:58

标签: android actionscript-3 flash air

我正在创建一个简单的绘图原型,可以在Android上使用,用户可以在屏幕上拖动手指并绘制基本的线条/形状等。在绘制相同区域时,我遇到了一些性能问题而性能大幅下降。

我想知道是否有任何方法,在绘制线后(触摸开始后,触摸移动,触摸结束事件链),将新绘制的线存储到包含其余图形的位图中

我已经看过bitmap.merge()但是这会在混合颜色方面产生问题。我只是希望将任何新的“图纸”保存在以前绘制的所有内容之上。

// To hold current 'drawing'
var clip:Shape = new Shape();   

// To hold past 'drawings'
var drawing:Bitmap = new Bitmap();

public function Main()
{
    Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT; 

    addChild(drawing);
    addChild (clip);

    addEventListener(TouchEvent.TOUCH_BEGIN, tBegin);
    addEventListener(TouchEvent.TOUCH_MOVE, tMove);
    addEventListener(TouchEvent.TOUCH_END, tEnd);
}

private function tBegin(e:TouchEvent):void 
{
    clip.graphics.lineStyle(28,0x000000);
    clip.graphics.moveTo(mouseX, mouseY);  
}

private function tMove(e:TouchEvent):void 
{
    clip.graphics.lineTo(mouseX, mouseY);
}

private function tEnd(e:TouchEvent):void 
{
    // Save new graphics and merge with drawing
}

1 个答案:

答案 0 :(得分:2)

只需继续绘制剪辑形状,然后在分配给位图的位图数据中绘制剪辑

// To hold current 'drawing'
var bmpData:BitmapData = new BitmapData (800, 800) // put here your desired size

var clip:Shape = new Shape();   

// To hold past 'drawings'
var drawing:Bitmap = new Bitmap(bmpData);

public function Main()
{
    Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT; 

    addChild(drawing);
    addChild (clip);



    addEventListener(TouchEvent.TOUCH_BEGIN, tBegin);
    addEventListener(TouchEvent.TOUCH_MOVE, tMove);
    addEventListener(TouchEvent.TOUCH_END, tEnd);
}

private function tBegin(e:TouchEvent):void 
{
    clip.graphics.lineStyle(28,0x000000);
    clip.graphics.moveTo(mouseX, mouseY);  
}

private function tMove(e:TouchEvent):void 
{
    clip.graphics.lineTo(mouseX, mouseY);
}

private function tEnd(e:TouchEvent):void 
{
    // Save new graphics and merge with drawing
    bmpData.draw (clip);
    clip.graphics.clear();
}