0

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

2 回答 2

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 的问题(我可能错了,通常我有不同的导航到文件夹的方法)。

希望有帮助!

于 2013-08-31T01:29:19.947 回答
-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);
    }
于 2019-01-16T21:11:00.873 回答