2016-12-04 118 views
1

我的Action Script 3代码存在问题。 我要让用户在spBoard中绘制任何他/她想要的,然后我想让他/她能够将其保存在本地磁盘中。 这是代码,但是这段代码只能保存spBoard而不会被用户淹没。将自定义的Sprite保存为本地磁盘的图像

import com.adobe.images.JPGEncoder; 
import com.adobe.images.PNGEncoder; 

var lineSize: Number = 7; 
var currentColor: Number; 

var spBoard: Sprite = new Sprite(); 
this.addChild(spBoard); 
spBoard.x = 280; 
spBoard.y = 23; 
drawBoard(); 

var shDrawing: Shape = new Shape(); 
this.addChild(shDrawing); 
shDrawing.x = 280; 
shDrawing.y = 23; 

var shMask: Shape = new Shape(); 
this.addChild(shMask); 
shMask.x = 280; 
shMask.y = 23; 
drawMask(); 
shDrawing.mask = shMask; 
var doDraw: Boolean = false; 

function drawBoard(): void { 
spBoard.graphics.lineStyle(1, 0x000000); 
spBoard.graphics.beginFill(0xFFFFFF); 
spBoard.graphics.drawRect(0, 0, 250, 250); 
spBoard.graphics.endFill(); 
spBoard.filters = [new DropShadowFilter()]; 
} 

function drawMask(): void { 
shMask.graphics.lineStyle(1, 0x000000); 
shMask.graphics.beginFill(0xFFFFFF); 
shMask.graphics.drawRect(1, 1, 249, 249); 
shMask.graphics.endFill(); 
} 


spBoard.addEventListener(MouseEvent.MOUSE_DOWN, boardDown); 
spBoard.addEventListener(MouseEvent.MOUSE_UP, boardUp); 

function boardDown(e: MouseEvent): void { 
var curX: Number = shDrawing.mouseX; 
var curY: Number = shDrawing.mouseY; 
doDraw = true; 
shDrawing.graphics.lineStyle(5, 0x000066); 

shDrawing.graphics.lineStyle(lineSize, currentColor); 
shDrawing.graphics.moveTo(curX, curY); 
} 

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

spBoard.addEventListener(MouseEvent.MOUSE_MOVE, boardMove); 

function boardMove(e: MouseEvent): void { 
var curX: Number = shDrawing.mouseX; 
var curY: Number = shDrawing.mouseY; 
if (doDraw) { 
    shDrawing.graphics.lineTo(curX, curY); 
} 
e.updateAfterEvent(); 
} 


save_image.addEventListener(MouseEvent.CLICK, save_image_function); 
function save_image_function(event:MouseEvent):void 
{ 
var bmd:BitmapData = new BitmapData(50,50); 
bmd.draw(spBoard); 
var encorder:PNGEncoder = new PNGEncoder(); 
var bytes:ByteArray = PNGEncoder.encode(bmd); 
var file:FileReference = new FileReference(); 
file.save(bytes, "Image.png"); 
} 
+0

其更好地留在你的代码的一些意见,并讲述在这个类中使用函数的一些事情,假设它的第一次,我们r看着这行。 –

回答

2

您在shDrawing绘图,然后保存spBoard! spBoard不包含任何绘制的grapgic! 您必须复制在保存之前将图形复制到spBoard sprite中。
我还使用了一个250x250大小的位图数据保存功能覆盖整个绘图板。


function save_image_function(event:MouseEvent):void 
{ 
    var _filters:Array = spBoard.filters; 
    var defaultHolder:Sprite = new Sprite(); 
    defaultHolder.graphics.copyFrom(spBoard.graphics); 
    spBoard.filters = []; 
    spBoard.graphics.copyFrom(shDrawing.graphics); 
    // above lines just for getting a back up of spBoard 


    var bmd:BitmapData = new BitmapData(250, 250); 
    bmd.draw(spBoard); 
    var encorder:PNGEncoder = new PNGEncoder(); 
    var bytes:ByteArray = PNGEncoder.encode(bmd); 
    var file:FileReference = new FileReference(); 
    file.save(bytes, "Image.png"); 

    // now retrieve default spBoard to what that was before the save process 
    spBoard.filters = _filters; 
    spBoard.graphics.clear(); 
    spBoard.graphics.copyFrom(defaultHolder.graphics); 
} 
+0

你能告诉我如何在Android设备中保存文件。感谢您的时间和回答 – mazName

+0

@Maziar没有什么区别,只需定义写入文件所需的权限,即包含在XML文件中,(注释)。如果他们是对的,也不要忘记接受答案。 ممنون –

+0

我已经尝试了一些fileName-app.xml文件,但它不起作用。你以前做过吗?我被告知,甚至保存时,该文件将在应用程序目录中。我想把它放在手机的文件夹中,就像下载一样。你能帮我吗?! – mazName