如何用as3将jpg图像保存到android手机

时间:2013-08-31 00:08:29

标签: android image actionscript-3 save jpeg

我正在尝试将图像保存到我的Android手机是一个特定的目录。 不知怎的,我花了几个小时但却无法让它发挥作用。我希望有人可以帮助我理解为什么我的代码不起作用或者有其他方法可以做到。

public function SaveTheImage(me:MouseEvent):void
{       
    ImageSaverBMD.draw(ImageHolder);

    var jpgEncoder:JPGEncoder = new JPGEncoder(100);
    var jpgBytes:ByteArray = jpgEncoder.encode(ImageSaverBMD);

    var myFile:File = File.documentsDirectory.resolvePath("/sdcard / DCIM / Camera/testingimage.jpg");
    var fs:FileStream = new FileStream();
    fs.open(myFile, FileMode.WRITE);
    fs.writeBytes(jpgBytes, 0, jpgBytes.length);
    fs.close();  
}

2 个答案:

答案 0 :(得分:0)

您的算法中有许多步骤可能导致错误,您提供的代码我可以做一些猜测,但有更好的方法。

首先尝试这段代码:

var s:Shape = new Shape();
s.graphics.beginFill(0);
s.graphics.drawCircle( 20, 20, 20);
s.graphics.endFill();

var bd:BitmapData = new BitmapData(40, 40, false);
bd.draw(s);

var jpgEncoder:JPGEncoder = new JPGEncoder(100);
var bytes:ByteArray = jpgEncoder.encode(bd);

var f:File = File.applicationDirectory;
var fs:FileStream = new FileStream();
fs.open(f, FileMode.WRITE);
fs.writeBytes(bytes);
fs.close();

这应该在您提供的目录中保存一个80x80像素的黑色圆圈。看看它是否有效。如果不是:检查权限以获得外部存储。

如果有效,请从上到下逐个删除代码:

  • 删除前两个区块并放置ImageSaverBMD.draw(ImageHolder)行。也许问题出在那个班级?可能是位图数据大小错误或者绘图矩阵的翻译不正确。

  • JPGEncoder可能没问题,它是一个常用的框架,但有时当我将它复制到我的源文件时,我需要更改.as文件中的包。你的包裹是否正确?

  • 您在File对象中的URL有空格,这可能是您的问题,请先尝试使用简单的URL,然后查看是否有效。可能是您尝试导航到具有相对URL模式的绝对URL的问题(我可能错了,通常我有不同的导航到文件夹的方法)。

希望有所帮助!

答案 1 :(得分:-1)

private function export():void
{

        var today_date:Date = new Date();
        var thismonth:uint = today_date.getMonth();
        var today_time;
        var currentTime:Date = new Date();
        var minutes = currentTime.getMinutes();
        var seconds = currentTime.getSeconds();
        var hours = currentTime.getHours() * 30 + currentTime.getMinutes() / 2;

        var mnth:Array = new Array('January','February','March','April','May','June','July','August','September','October','November','December');
        var fileName:String = (today_date.getDate()+mnth[thismonth]+today_date.getFullYear()+"_"+currentTime.hours + currentTime.minutes + currentTime.seconds+".png");
        //trace(fileName);// displays current date in United States date format
        var bmd:BitmapData = new BitmapData(board.width, board.height);//(600, 290);

        bmd.draw(board);

        var ba:ByteArray = PNGEncoder.encode(bmd);
       // var file:File = File.applicationDirectory;
        //var file:FileReference = new FileReference();
        var fs : FileStream = new FileStream();
        var targetFile : File = File.documentsDirectory.resolvePath(fileName);
        //var targetFile : File = File.applicationDirectory.resolvePath(fileName);
        fs.open(targetFile, FileMode.WRITE);
        fs.writeBytes(ba);
        fs.close();

        //file.addEventListener(Event.COMPLETE, saveSuccessful);
        saveDialog = new SaveDialog();

        addChild(saveDialog);
        test = setInterval(showMessage,2000);
        //var test = setInterval(showMessage,3000);
        saveDialog.closeBtn.addEventListener(MouseEvent.MOUSE_UP, closeSaveDialog);
        //file.save(ba, fileName);
    }