android - 如何压缩Camera.takepicture拍摄的照片

标签 android bitmap camera compression jpeg

我正在开发一款应用,用户可以通过我的 CameraActivity(SurfaceView+Camera)拍照并保存。之后将处理位图。

让我向您介绍详细信息。 图片是用:

mCamera.takePicture(null, null, new PictureCallback() {...}

我没有指定 .jpeg 质量。
用 HTC One S 测试,拍照后保存。图片大小不超过100kb
用Samsung GT-I9000测试,拍照后保存,但这里的区别是大小,超过1.2Mb。

因为我稍后需要处理位图,所以当我尝试解码 bimap 来处理它时,GT-I9000 遇到了一些OutOfMemory 问题:

try {
    FileInputStream fis = new FileInputStream(new File(imagePath));
    Bitmap savedPicture = BitmapFactory.decodeStream(fis);


我尝试更改Camera Parameters .setJpegQuality(quality),但并没有太大的不同。

图像将占据所有屏幕大小,我使用了这种方法 Loading Large Bitmaps Efficiently 它有效,我摆脱了 OutOfMemory Exceptions 但我仍然有一些问题:

  1. 设备之间的文件大小差异?我认为 HTC One S 比 GT-I9000 好,所以为什么不保存更大的图片?

  2. 图像分辨率,HTC One S 640x480,GT-I9000 2560x1920 为什么?嗯,这回答了第一个问题,但为什么会这样?

感谢您的宝贵时间 ;)

最佳答案

您的问题不在于图像压缩,而在于分辨率,即尺寸。不同的 Android 设备有不同的默认图片尺寸。但幸运的是,你有 Camera.Parameters.setPictureSize(int width, int height) 方法。您可以在调用 Camera.takePicture() 之前随时设置大小,如下所示:

Camera.Parameters param = mCamera.getParameters();
param.setPictureSize(640, 480);
mCamera.setParameters(param);

请注意,不同的 Android 设备也支持不同的图片尺寸。 IE。您不能设置任意大小,您必须从特定于设备的列表中选择一个。有一种方法 Camera.Parameters.getSupportedPictureSizes()。

请注意,同一设备上支持的图片尺寸对于两个摄像头是不同的(如果设备有前置摄像头和后置摄像头)。在开始查询和设置之前打开正确的相机。

最后,我必须承认,我听说过的所有设备都支持 640x480 图片尺寸。

关于android - 如何压缩Camera.takepicture拍摄的照片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16902627/

相关文章:

android - 是否有降低 sdk 版本的性能损失

android - 如果使用应用程序的人决定退出而不回答问题,是否有任何方法可以自动锁定设备

image-processing - 如何在 OCAML 中读取位图?

iphone - 自定义相机旋转问题

android - 在 Visual Studio 2017 中找不到 API 级别 26 的 android.jar

java - Eclipse 错误地声称我有旧版本的 Android SDK

java - Android 上的重新尺寸图像

android - 使用 Universal Image Loader 加载后调整位图大小

iphone - 相机捕捉设备曝光模式锁定

android - 如何仅从 DCIM 目录获取图像选择器