3

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

说了这么多,让我来详细介绍一下。这张照片是用:

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

我没有指定 .jpeg 质量。
用 HTC One S 进行测试,拍照后保存。图片大小从不超过 100kb
用三星 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),但我并没有产生很大的不同。

图像将占据所有屏幕尺寸,我使用这种方法有效地加载大位图 它有效,我摆脱了OutOfMemory 异常,但我仍然有一些问题:

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

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

谢谢你的时间 ;)

4

1 回答 1

5

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

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

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

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

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

于 2013-06-03T20:37:19.750 回答