2010-03-27 10 views
0

Je suis très débutant en flash. Je veux charger une image, montrer un curseur sur l'image et sur mousedown je veux brouiller cette partie réelle de l'image. (Par exemple, vous pouvez flouter votre visage sur l'image, puis enregistrer la nouvelle image).Flash AS3 brouiller ou liquéfier une partie d'une image avec la souris

je peux supprimer des parties de l'image avec la ligne blanche, mais je voudrais rendre floue la place

// LIVE JPEG ENCODER 0.3 
// from bytearray.org 
import asfiles.encoding.JPEGEncoder; 
import flash.external.ExternalInterface; 

ExternalInterface.addCallback("flash_saveImage", inflash_saveImage); 

var loader:Loader = new Loader(); 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, handleComplete); 
loader.load(new URLRequest(loaderInfo.parameters._filename)); 
//loader.load(new URLRequest("b.jpg")); 

var container_mc:MovieClip = new MovieClip;//create movieclip 

function handleComplete(e:Event):void 
    { 
    addChild(container_mc); 
    var bitmapData:BitmapData = Bitmap(e.target.content).bitmapData; 
    var matrix:Matrix = new Matrix(); 
    container_mc.graphics.clear(); 
    container_mc.graphics.beginBitmapFill(bitmapData, matrix, false); 
    //container_mc.graphics.beginFill(0xFFFFFF,0); 
    container_mc.graphics.drawRect(0, 0, bitmapData.width, bitmapData.height); 
    container_mc.graphics.endFill(); 
    swapChildren(container_mc, pencil); 
    container_mc.addEventListener(MouseEvent.MOUSE_DOWN, startDrawing); 
    container_mc.addEventListener(MouseEvent.MOUSE_UP, stopDrawing); 
    container_mc.addEventListener(MouseEvent.MOUSE_MOVE, makeLine);  
    } 

    stage.addEventListener(MouseEvent.MOUSE_MOVE, moveCursor); 
    Mouse.hide(); 

function moveCursor(event:MouseEvent):void 
{ 
    pencil.x = event.stageX; 
    pencil.y = event.stageY; 
} 

function startDrawing(event:MouseEvent):void{ 
    container_mc.graphics.lineStyle(20, 0xFFFFFF, 1); 
    container_mc.graphics.moveTo(mouseX, mouseY); 
    container_mc.addEventListener(MouseEvent.MOUSE_MOVE, makeLine); 
} 

function stopDrawing(event:MouseEvent):void{ 
    container_mc.removeEventListener(MouseEvent.MOUSE_MOVE, makeLine); 
} 

function makeLine(event:MouseEvent):void{ 
    container_mc.graphics.lineTo(mouseX, mouseY); 
} 


function inflash_saveImage ():void 
    { 
    var myURLLoader:URLLoader = new URLLoader(); 
    var myBitmapSource:BitmapData = new BitmapData (container_mc.width, container_mc.height); 

    // render the player as a bitmapdata 
    myBitmapSource.draw (container_mc); 

    // create the encoder with the appropriate quality 
    var myEncoder:JPEGEncoder = new JPEGEncoder(80); 

    // generate a JPG binary stream to have a preview 
    var myCapStream:ByteArray = myEncoder.encode (myBitmapSource); 

    var header:URLRequestHeader = new URLRequestHeader ("Content-type", "application/octet-stream"); 

    var myRequest:URLRequest = new URLRequest ("save.php"); 

    myRequest.requestHeaders.push (header); 

    myRequest.method = URLRequestMethod.POST; 

    myRequest.data = myCapStream; 
    myURLLoader.load (myRequest); 

} 

Merci, hameau

+0

Personne? :(Je pensais que c'est assez simple – hamlet

Répondre

2

Je peux penser à une solution à votre problème. Faites une copie de l'image originale et brouillez tout. Ensuite, utilisez la souris pour positionner un masque qui copie les pixels de l'image estompée et ajoutez-le au-dessus de l'image originale. En fin de compte il vous suffit d'enregistrer l'image d'origine ainsi que les pièces blured

-> récipient transparent (ce qui est où vous allez dessiner les pixels)

-> image originale

-> image floue (Je n'ai pas besoin d'ajouter ceci à la liste d'affichage, utilisée comme source pour peindre les pixels flous)

Je n'ai pas essayé cela avec du flou, mais j'ai fait une chose similaire à appliquer un filtre à une partie d'une image, et pour autant que je me souvienne c'était la configuration.