# Erase mask, running slow on IOS

**URL:** <https://forum.kirupa.com/t/erase-mask-running-slow-on-ios/323988>\
**Category:** flash\
**Created:** [July 27, 2011, 9:48am UTC](https://forum.kirupa.com/t/erase-mask-running-slow-on-ios/323988 "2011-07-27T09:48:14Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![zebdaag](https://avatars.discourse-cdn.com/v4/letter/z/53a042/32.png) [@zebdaag](https://forum.kirupa.com/u/zebdaag)\
**Post date:** [July 27, 2011, 9:48am UTC](https://forum.kirupa.com/t/erase-mask-running-slow-on-ios/323988/1 "2011-07-27T09:48:14Z")

</div>

Hi,

I’m using the script below to erase an image from the screen. On an iPad. On my computer it’s running fine. On the iPad it’s very slow. I was wondering if someone has suggestions on improving this script to make it run faster.

Thanks,  
Joost

```auto

//
////////////////////////////////////////////////////
////////////////////////////////////////////////////
//
var lineSize:Number=200;
var doDraw:Boolean=false;
var resumeDrawing:Boolean=false;
var erasableBitmapData:BitmapData = new BitmapData(768, 1024, true, 0xFFFFFFFF);
var erasableBitmap:Bitmap = new Bitmap(erasableBitmapData);
erasableBitmap.cacheAsBitmap = true;
addChild(erasableBitmap);

maskee.cacheAsBitmap = true;
maskee.mask = erasableBitmap;
/ *************************
ERASER
************************** /
var eraserClip:Sprite = new Sprite();
initEraser();
function initEraser():void {
    eraserClip.graphics.lineStyle(lineSize,0xff0000);
    eraserClip.graphics.moveTo(stage.mouseX,stage.mouseY);
}
//
var drawnBitmapData:BitmapData = new BitmapData(768, 1024, true, 0x00000000);
var drawnBitmap:Bitmap = new Bitmap(drawnBitmapData);
drawnBitmap.cacheAsBitmap = true;
//
var tempD:BitmapData = new BitmapData(drawnBitmapData.width,drawnBitmapData.height,true,0x0000CCFF);

var countDraw:int = 0;
var endDraw:int = 0;
//
var animationSpeed:int = 40; // 1000 is seconde
var timerVarken:Timer;
//
/ *************************
MOUSE EVENTS
************************** /
timerVarken = new Timer(animationSpeed,0);
timerVarken.addEventListener(TimerEvent.TIMER, maskMove);
timerVarken.start();
maskee.addEventListener(MouseEvent.MOUSE_DOWN,startDrawing);
maskee.addEventListener(MouseEvent.MOUSE_UP,stopDrawing);

function startDrawing(e:MouseEvent):void {
    eraserClip.graphics.moveTo(stage.mouseX,stage.mouseY);
    doDraw=true;
}

function stopDrawing(e:MouseEvent):void {
    doDraw=false;
    resumeDrawing = false;
}

function maskOut(e:Event):void {
    if (doDraw){
        resumeDrawing = true;
    }
}

function maskOver(e:MouseEvent):void {
    if (resumeDrawing){
        resumeDrawing = false;
        eraserClip.graphics.moveTo(stage.mouseX,stage.mouseY);
    }
}

function maskMove(e:TimerEvent):void {
    //
    if (doDraw && !resumeDrawing){
        eraserClip.graphics.lineTo(stage.mouseX,stage.mouseY);
        drawnBitmapData.fillRect(drawnBitmapData.rect, 0x00000000); 
        drawnBitmapData.draw(eraserClip , new Matrix(), null, BlendMode.NORMAL);
        erasableBitmapData.fillRect(erasableBitmapData.rect, 0xFFFFFFFF);
        erasableBitmapData.draw(drawnBitmap, new Matrix(), null, BlendMode.ERASE);
        // -----------------------------
        // ------------ ALI ------------
        // -----------------------------
        tempD.draw(eraserClip);
        
        var totalImgRect:Rectangle = new Rectangle(0,0,drawnBitmapData.width,drawnBitmapData.height);
        var bArr:ByteArray = tempD.getPixels(new Rectangle(0,0,eraserClip.width,eraserClip.height));
        var totArr:ByteArray = drawnBitmapData.getPixels(totalImgRect);
        
        var transRedPixels:uint = tempD.histogram()[0][0];
        
        var v1:Vector.<uint> = drawnBitmapData.getVector(totalImgRect);
        var perc:Number = 100 - ((100 * transRedPixels) / v1.length);
        if (perc > 80) {
            maskee.x = 768;
            reset(null);
            startDrawing(null);
            tempD = new BitmapData(drawnBitmapData.width,drawnBitmapData.height,true,0x0000CCFF);
            //MovieClip(root).removeChild(MovieClip(root).getChildByName("BMP"));
        }
        //
        e.updateAfterEvent();
    }
}

function reset(e:Event):void {
    eraserClip.graphics.clear();
    initEraser();
    erasableBitmapData.fillRect(erasableBitmapData.rect, 0xFFFFFFFF);
}

```
