2013-08-31 50 views
0

我想保存图像到我的android手机是一个特定的目录。 不知何故,我花了几个小时,但无法工作。我希望有人能够帮助我理解为什么我的代码无法正常工作,或者如果有另一种方式来执行此操作。如何将JPG图像保存为安卓手机与as3

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(); 
} 
+1

请更精确!你有没有在你的Manifest上声明权限?你的应用程序在启动时崩溃了吗?你的logcat展示了什么?什么... –

回答

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(); 

这应该保存一个80×80像素您提供的目录黑圈。看看它是否有效。如果没有:检查权限是否有外部存储。

如果一切正常,开始删除代码块逐块从上到下:

  • 卸下顶部两个街区,把你的ImageSaverBMD.draw(ImageHolder)线。也许问题出在那个班上?可能是位图数据大小错误或绘图矩阵的转换不正确。

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

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

希望帮助!

+0

非常感谢, 我会尝试你的代码我希望该图片将被添加到相机滚动图像我如何到达该目录?从你的代码我明白,该文件将被保存到应用程序目录,我能够看到它在相机卷我使用Android的空气。 非常感谢您的回答。 – tomergott

+0

好吧,发现问题唯一的问题是解决方案路径可能是错误的路径,除了这一切都很好。现在下一个问题是刷新画廊我需要关闭设备,以便看到相机胶卷中的图片,所以我需要使用扩展名refreshgallery,但没有如何使用它的示例...(为什么一切都必须有问题...) – tomergott

+0

如果您当前关于保存文件的问题得到解答,我会说接受此答案并对您的扩展程序提出问题,这会让您有更多机会回答答案。对另外一件事的评论将会成为焦点话题。 –

相关问题