首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何压缩Camera.takepicture拍摄的照片

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

Stack Overflow用户
提问于 2013-06-03 17:40:48
回答 1查看 3.5K关注 0票数 3

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

说让我跟你说说细节。这张照片的拍摄内容如下:

代码语言:javascript
复制
mCamera.takePicture(null, null, new PictureCallback() {...}

我没有指定.jpeg的质量。

使用HTC One S进行测试,拍摄并保存图片。图片大小不超过100 The。

使用三星GT 9000进行测试,照片被拍摄,然后保存,但这里的区别是大小,它超过了1,2兆。

由于我需要在后面处理位图,所以当我试图解码bimap以处理位图时,我会遇到一些OutOfMemory问题:

代码语言:javascript
复制
try {
    FileInputStream fis = new FileInputStream(new File(imagePath));
    Bitmap savedPicture = BitmapFactory.decodeStream(fis);

我曾试图改变Camera Parameters .setJpegQuality(quality),但它并没有产生太大的影响。

图像将占据所有屏幕的大小,我使用了这种方法-- 高效加载大型位图 --它成功了,我去掉了OutOfMemory Exception,但是我仍然有一些问题:

  1. 设备之间的文件大小差异?我认为HTC One S比GT-i 9000更好,那么为什么不保存更大的图片呢?
  2. 图像分辨率,HTC One S 640x480,GT-i 9000 2560x1920为什么?这回答了第一个问题,但为什么会这样呢?

(谢谢你抽出时间;)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-03 20:37:19

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

代码语言:javascript
复制
Camera.Parameters param = mCamera.getParameters();
param.setPictureSize(640, 480);
mCamera.setParameters(param);

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

请注意,同一设备上支持的图片大小对于这两个摄像机是不同的(如果该设备具有前向摄像机和后面向摄像机)。在开始查询和设置之前,请打开正确的摄像机。

最后,我应该承认,我听说过的所有设备都支持640x480图片大小。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16902627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档