【发布时间】:2011-12-20 04:53:43
【问题描述】:
我正在为 Android 开发一个应用程序,该应用程序的一部分必须拍照并将它们保存到 SD 卡。 onPictureTaken 方法返回一个字节数组,其中包含捕获图像的数据。
我需要做的就是将字节数组保存到 .jpeg 图像文件中。我试图在 BitmapFactory.decodeByteArray(获取 Bitmap)和 bImage.compress(到 OutputStream)、普通 OutputStream 和 BufferedOutputStream 的帮助下做到这一点。所有这三种方法似乎都给了我同样奇怪的错误。我的 Android 手机(8MP 相机和一个不错的处理器),似乎保存了照片(尺寸看起来正确),但是以一种损坏的方式(图像被切片并且每个切片都被移动;或者我只是得到各种颜色的几乎水平线) ;奇怪的是,带有 5MP 摄像头和快速处理器的 Android 平板电脑似乎可以正确保存图像。
所以我认为处理器可能无法跟上保存大图像的速度,因为我在大约 3 张图片后出现 OutOfMemory 异常(即使压缩质量为 40)。但是,内置的相机应用程序是如何做到的,而且速度也快得多?我很确定(来自调试)OutputStream 写入了所有数据(字节),应该没问题,但它仍然损坏。
***简而言之,将字节数组保存到 jpeg 文件的最佳/最快方法是什么?
提前致谢, 标记
我尝试过的代码(以及其他一些细微的变化):
try {
Bitmap image = BitmapFactory.decodeByteArray(args, 0, args.length);
OutputStream fOut = new FileOutputStream(externalStorageFile);
long time = System.currentTimeMillis();
image.compress(Bitmap.CompressFormat.JPEG,
jpegQuality, fOut);
System.out.println(System.currentTimeMillis() - time);
fOut.flush();
fOut.close();
} catch (Exception e) {
}
和
try {
externalStorageFile.createNewFile();
FileOutputStream fos = new FileOutputStream(externalStorageFile);
fos.write(args);
fos.flush();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
【问题讨论】:
-
我认为这可能是我的确切问题:stackoverflow.com/questions/5859876/… 这不是出于愿望,而是在 HTC 手机上
-
是的,我尝试了他们所做的,这似乎是问题所在。现在如何修复它...有人知道如何修复它吗?因为 Paper Camera 和 Camera ZOOM FX 等应用程序具有工作预览(它们不会扭曲)并且可以很好地拍照。如果没有,我想我要么必须使相机预览失真,但图片可以;或者让预览看起来不错,并让它无法在某些 HTC 设备上运行...
标签: android bytearray jpeg android-camera