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

如何使用as3将jpg图像保存到android手机,android,image,actionscript-3,save,jpeg,Android,Image,Actionscript 3,Save,Jpeg,我正在尝试将图像保存到我的android手机的特定目录中。 不知怎的,我花了好几个小时,却没能让它工作。我希望有人能帮助我理解为什么我的代码不起作用,或者是否有其他方法可以做到这一点 public function SaveTheImage(me:MouseEvent):void { ImageSaverBMD.draw(ImageHolder); var jpgEncoder:JPGEncoder = new JPGEncoder(100); var j

我正在尝试将图像保存到我的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();  
}

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

首先,请尝试以下代码:

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.drawImageHolder放在行中。也许问题出在那门课上?可能是位图数据大小错误,或者用于绘制的矩阵的转换不正确

JPGEncoder可能还可以,它是一个常用的框架,但有时当我将它复制到源文件中时,我需要更改.as文件中的包。你的包裹对吗

文件对象中的URL有空格,这可能是您的问题,请先尝试使用一个简单的URL,看看是否有效。这可能是一个问题,你试图导航到一个绝对的URL与相对的URL模式我可能是错误的,在这方面,通常我有不同的方法导航到一个文件夹


希望有帮助

请说得更准确些!您是否在清单上声明了权限?你的应用在发布时崩溃了吗?你的航海日志显示了什么?什么…非常感谢,我会尝试你的代码我想照片将被添加到cameraroll图像我如何进入该目录?从你的代码中,我知道该文件将被保存到应用程序目录中,我是否能够在我使用air for android的相机卷中看到它。再次感谢你的回答。好的,发现了问题唯一的问题是解决路径可能是错误的路径除了这个一切都很好。现在,刷新库的下一个问题是,我需要关闭设备,以便查看相机卷中的图片,因此我需要使用扩展刷新库,但没有如何使用它的示例。。。为什么每件事都有问题。。。如果您当前关于保存文件的问题得到回答,我会说接受此答案并提出一个关于您的扩展名的问题,这更有可能让您得到答案,因为在评论中回答其他问题将是离题的。谢谢您的帮助我成功地将图像保存到文件,但我面临另一个问题,保存的图像放在侧面。是否有方法保存文件,使其正确竖立?旋转对象,然后将其制作成位图数据对象并保存。
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);
    }