Код: Выделить всё
import PNGEncoder;/* Шейп карандаша, все нарисованное с помощью этого инструмента и инструмента ластика запоминается внутри board.pencilDraw */var pencilDraw:Shape = new Shape();/* Цвета */var colorsBmd:BitmapData;//мы будем использовать эту битмапдату, чтобы получить значение RGB для пиксела при клике var pixelValue:uint;var activeColor:uint = 0x000000;//Это текущий цвет в использовании, отображается с помощью мувика shapeSize/* Шейп размера цвета */var ct:ColorTransform = new ColorTransform();/* Листенеры */saveButton.addEventListener(MouseEvent.MOUSE_UP, save);clearTool.addEventListener(MouseEvent.MOUSE_UP, clearBoard);/* Добавляем слушатели в мувиклип board , чтобы рисовать что-то в нем */board.addEventListener(MouseEvent.MOUSE_DOWN, startPencilTool);board.addEventListener(MouseEvent.MOUSE_UP, stopPencilTool);function startPencilTool(e:MouseEvent):void{ pencilDraw = new Shape();//Мы добавляем новый шейп, чтобы рисовать всегда сверху (в случае с текстом или стиранием ластиком) board.addChild(pencilDraw); //добавляем этот шейп в мувик board ; pencilDraw.graphics.moveTo(mouseX, mouseY); //сдвигаем положение отрисовки к положению мыши ; pencilDraw.graphics.lineStyle(10, activeColor); //Устанавливаем толщину линии равной размеру мувика ShapeSize и устанавливаем ее цвет в текущий активный цвет; board.addEventListener(MouseEvent.MOUSE_MOVE, drawPencilTool);}//добавляем слушатель к следующей функции function drawPencilTool(e:MouseEvent):void{ pencilDraw.graphics.lineTo(mouseX, mouseY);}function stopPencilTool(e:MouseEvent):void{ board.removeEventListener(MouseEvent.MOUSE_MOVE, drawPencilTool);}//Сахраняемfunction export():void{ var bmd:BitmapData = new BitmapData(pLoader.width,pLoader.height);//Создаем новую битмапдату с размером board bmd.draw(board); //Рисуем мувиклип board в рисунок битмап в битмапдате; var ba:ByteArray = PNGEncoder.encode(bmd);//Создаем ByteArray для битмапдаты, закодированный как PNG var file:FileReference = new FileReference();// Новый экземпляр объекта File Reference , чтобы управлять сохранением file.addEventListener(Event.COMPLETE, saveSuccessful); //Добавляем новый слушатель, чтобы слушать, когда закончится сохранение; file.save(ba, "MyDrawing.png");}//Сохраняем ByteArray как PNG ;function saveSuccessful(e:Event):void{ trace("Сохранено!");}function save(e:MouseEvent):void{ export();//Вызываем функцию export , чтобы начать процесс сохранения }function clearBoard(e:MouseEvent):void{ pencilDraw.graphics.clear();}function highlightTool(tool:DisplayObject):void{ tool.visible = true;//Подсвеченный инструмент в параметре }/* Скрываем инструменты в параметрах */function hideTools(tool1:DisplayObject, tool2:DisplayObject):void{ tool1.visible = false; tool2.visible = false;} //загрузка фотоvar fileRef:FileReference;var pLoader:Loader;var resizeObject = {w:450,h:450};var textTypeFilter:FileFilter;var bmp:Bitmap;pLoader=new Loader(); fileRef=new FileReference();textTypeFilter = new FileFilter("Images (*.jpg, *.jpeg, *.gif, *.png)","*.jpg;*.jpeg;*.gif;*.png"); fileRef.addEventListener(Event.SELECT, onFileSelected);fileRef.addEventListener(Event.CANCEL, onCancel);fileRef.addEventListener(IOErrorEvent.IO_ERROR, onIOError);fileRef.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);selectBTN.addEventListener("mouseDown",selectFotoPressedHandler); function onFileSelected(evt:Event):void{ fileRef.addEventListener(ProgressEvent.PROGRESS, onProgress); fileRef.addEventListener(Event.COMPLETE, onComplete); fileRef.load();}function onProgress(evt:ProgressEvent):void{ trace("Loaded " + evt.bytesLoaded + " of " + evt.bytesTotal + " bytes.");}function onCancel(evt:Event):void{ trace("The browse request was canceled by the user.");}function onComplete(evt:Event):void{ pLoader.contentLoaderInfo.addEventListener(Event.INIT,imageInited); pLoader.loadBytes(fileRef.data);}function imageInited(evt:Event):void{ var myBitmapData:BitmapData = new BitmapData(pLoader.width,pLoader.height); myBitmapData.draw(pLoader); //// если пока не объявлен битмап - объявляем а если он уже существует - в его свойство bitmapData запихиваем объект myBitmapData; // это сделано для множественного выбора фото if (bmp == null) { bmp = new Bitmap(myBitmapData); } else { bmp.bitmapData = myBitmapData; } if (board.contains(bmp)) { board.removeChild(bmp); } board.addChild(bmp); resizePicture();}function onIOError(evt:IOErrorEvent):void{ trace("There was an IO Error.");}function onSecurityError(evt:Event):void{ trace("There was a security error.");}function GoSelectFoto(){ fileRef.browse([textTypeFilter]);}function selectFotoPressedHandler(e:Event){ trace("selectFotoPressed"); GoSelectFoto();}function resizePicture(){ var delitel = 0; if (board.width > resizeObject.w) { delitel = board.width / resizeObject.w; board.width = board.width / delitel; board.height = board.height / delitel; } if (board.height > resizeObject.h) { delitel = board.height / resizeObject.h; board.height = board.height / delitel; board.width = board.width / delitel; } trace("resized");}Код: Выделить всё
board.addChild(pencilDraw);А когда убираю добавление мувика к шейпу:
Код: Выделить всё
addChild(pencilDraw);Исходник: draw_in_foto.rar
