我正在为Android构建自定义相机应用程序。 Camera.Parameters API包含效果良好的setPreviewSize
或setPictureSize
等方法。
但我正在尝试使用setJpegQuality(int)参数:
Camera cam = getCameraInstance();
if(cam == null){
setResult(INSTANCE_ERROR);
finish();
}
params = cam.getParameters();
params.setJpegQuality(jpegQuality);
cam.setParameters(params);
我正在3种不同的设备上测试我的应用程序:HTC Desire Z,Galaxy S2和Galaxy S4。
setJpegQuality
正在开发HTC(Android 2.2.1
)和Galaxy S2(4.1.2
),但在Galaxy S4设备(4.2.2
)上失败。
所以我的问题:这个功能是否已被弃用?还有另一种设置图像质量的方法吗?在Developer文档中,它似乎不是一个已弃用的函数,所以我有点困惑......
我也试过
params.set("jpeg-quality", jpegQuality);
但它是一样的:(
感谢您的回答。
答案 0 :(得分:1)
对于S3和S4,您可以编写特定于设备的代码来减小文件大小。
如果你在google上搜索,Android开发团队也提到这一切都取决于制造商的实施(https://code.google.com/p/android/issues/detail?id=8091)。相机参数和功能的实现完全取决于我认为使用的硬件。
我曾为我的某个应用使用过运动传感器。还有,我必须编写特定于设备的代码,以在应用程序中获得所需的行为。
我知道它不是我们作为开发人员所期望的,但我相信我们开发人员可以解决任何问题。 :)
答案 1 :(得分:0)
我使用CWAC-Camera库作为自定义相机。我分叉了主存储库,并在jpegQuality
添加了PictureTransaction
参数:
https://github.com/cookbrite/cwac-camera/commit/65a0a2082194dfc8069f605f0191c43357bb0852
这可确保始终将生成的图片压缩到所需的质量。
这种方法的一个缺点是它必须在应用程序代码中加载和压缩完整大小的图像文件,而在setJpegQuality
上使用Camera.Parameters
可能会更加优化。
答案 2 :(得分:0)
抱歉,我没有看到答案最终来了:)我甚至不再使用这个不工作的参数
当我将其保存为文件时,我找到了设置图片质量的解决方案:
FileOutputStream fos = new FileOutputStream(finalFilePath);
bmp.compress(Bitmap.CompressFormat.JPEG, jpegQuality, fos);
希望有所帮助