Flash AS3 размытие или измельчение части изображения с помощью мыши - PullRequest
0 голосов
/ 27 марта 2010

Я очень новичок во флеше. Я хочу загрузить изображение, показать курсор над изображением, а при mousedown я хочу размыть эту фактическую часть изображения. (например, вы можете размыть лицо на изображении, а затем сохранить новое изображение).

Я могу удалить части изображения с белой линией, но вместо этого хотел бы размыть

    // 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 );

}

Спасибо, Деревушка

1 Ответ

2 голосов
/ 28 марта 2010

Я могу придумать одно решение для вашей проблемы. Сделайте копию оригинального изображения размытым. затем с помощью мыши поместите маску, которая копирует пиксели с размытого изображения, и добавьте его поверх исходного изображения. В конце концов, вам просто нужно сохранить исходное изображение плюс размытые части

-> прозрачный контейнер (здесь вы будете рисовать пиксели)

-> исходное изображение

-> размытое изображение (нет необходимости добавлять его в список отображения, используемый в качестве источника для рисования размытых пикселей)

Я не пробовал это с размытием, но сделал аналогичную вещь, чтобы применить фильтр к части изображения, и, насколько я помню, это была настройка.

...