我正在开发一款应用,用户可以通过我的 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 但我仍然有一些问题:
设备之间的文件大小差异?我认为 HTC One S 比 GT-I9000 好,所以为什么不保存更大的图片?
图像分辨率,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/