【问题标题】:Low Quality Image output Camera API低质量图像输出相机 API
【发布时间】:2014-09-22 09:24:15
【问题描述】:

我开发了一个用户拍照的应用程序,然后将图像临时写入文件以检查网络连接,如果网络可用,则上传到服务器。

我一直在测试,它就像一种享受。但是,我开始在 LG Nexus 4 上进行测试,图像质量非常低。预览质量完美,但是当它上传并显示在应用程序中时,它的质量太低了,你甚至无法辨认出图像。

我在三星 s3 和 s4 上进行了测试,显示的图像非常完美。我在 onPictureTaken 方法中记录了字节数组的大小,与其他两个设备产生的值相比,它的大小非常低。

我在日志中注意到我得到了这个:

09-22 10:15:13.001     196-4548/? E/mm-camera﹕ sensor_load_chromatix: libchromatix_imx111_preview.so: 30
09-22 10:15:13.101     196-4548/? E/mm-camera﹕ vfe_ops_init: E
09-22 10:15:13.111     196-4548/? E/mm-camera﹕ vfe_legacy_stats_buffer_init: AEC_STATS_BUFNUM
09-22 10:15:13.111     196-4548/? E/mm-camera﹕ vfe_legacy_stats_buffer_init: AEC_STATS_BUFNUM
09-22 10:15:13.121     196-4548/? E/mm-camera﹕ mctl_init_stats_proc_info: snap_max_line_cnt =30096
09-22 10:15:13.131      174-174/? E/QCameraHWI﹕ android::status_t android::QCameraHardwareInterface::setPreviewWindow(preview_stream_ops_t*): mPreviewWindow = 0x0xb79ae9d8, mStreamDisplay = 0x0xb79a8448
09-22 10:15:13.131      174-174/? D/QCameraHWI﹕ android::status_t android::QCameraHardwareInterface::startPreview():  start preview now
09-22 10:15:13.131      174-174/? I/QCameraHWI﹕ android::status_t android::QCameraHardwareInterface::startPreview2():Setting ZSL mode
09-22 10:15:13.131     196-4548/? E/mm-camera﹕ config_proc_CAMERA_SET_INFORM_STARTPREVIEW
09-22 10:15:13.131     196-4548/? E/mm-camera﹕ config_update_stream_info Storing stream parameters for video inst 1 as : width = 640, height 480, format = 1 inst_handle = 810081 cid = 0
09-22 10:15:13.151     196-4548/? E/mm-camera﹕ config_update_stream_info Storing stream parameters for video inst 3 as : width = 640, height 480, format = 1 inst_handle = 830083 cid = 0
09-22 10:15:13.151     196-4548/? E/mm-camera﹕ config_update_stream_info Storing stream parameters for video inst 4 as : width = 512, height 384, format = 1 inst_handle = 840084 cid = 0
09-22 10:15:13.171     196-4548/? E/mm-camera﹕ config_decide_vfe_outputs: Ports Used 3, Op mode 1
09-22 10:15:13.171     196-4548/? E/mm-camera﹕ config_decide_vfe_outputs Current mode 0 Full size streaming : Disabled
09-22 10:15:13.171     196-4548/? E/mm-camera﹕ config_decide_vfe_outputs: Primary: 640x480, extra_pad: 0x0, Fmt: 1, Type: 1, Path: 1
09-22 10:15:13.171     196-4548/? E/mm-camera﹕ config_decide_vfe_outputs: Secondary: 640x480, extra_pad: 0x0, Fmt: 1, Type: 3, Path: 4
09-22 10:15:13.171     196-4548/? E/mm-camera﹕ config_update_inst_handles Updated the inst handles as 810081, 830083, 0, 0
09-22 10:15:13.312     196-4548/? E/mm-camera﹕ sensor_load_chromatix: libchromatix_imx111_zsl.so: 26
09-22 10:15:13.402     196-4548/? E/mm-camera﹕ camif_client_set_params: camif has associated with obj mask 0x1
09-22 10:15:13.402     196-4548/? E/mm-camera﹕ config_v2_CAMERA_START_common CAMIF_PARAMS_ADD_OBJ_ID failed -1
09-22 10:15:13.402     196-4548/? E/mm-camera﹕ vfe_operation_config: format 3
09-22 10:15:13.402     196-4548/? E/mm-camera﹕ vfe_operation_config:vfe_op_mode=5
09-22 10:15:13.402     196-4548/? E/mm-camera﹕ Invalid ASD Set Params Type
09-22 10:15:13.402     196-4548/? E/mm-camera﹕ vfe_set_bestshot: Bestshot mode not changed

所以我只是希望是否有人以前遇到过这种情况?或者任何人有任何关于它的信息,因为我不确定如何继续......

谢谢

编辑 为了尝试解决此问题,我添加了以下代码:

Camera.Parameters parameters = camera.getParameters();
List<Camera.Size> supportedPreviewSizes =  camera.getParameters().getSupportedPreviewSizes();
List<Camera.Size> supportedPictureSize = camera.getParameters().getSupportedPictureSizes();
Log.i("SUPPORTED SIZES: ", String.valueOf(supportedPreviewSizes.size()));
Log.i("SUPPORTED PICTURE SIZES: ", String.valueOf(supportedPictureSize.size()));
parameters.setPreviewSize(supportedPreviewSizes.get(0).width, supportedPreviewSizes.get(0).height);
parameters.setPictureSize(supportedPictureSize.get(1).width, supportedPictureSize.get(1).height);

正如我所认为的那样,使用了不受支持的图片尺寸。

【问题讨论】:

  • 没有看到您的代码,很难提供帮助。很好,您在评论中解释说您没有使用 Intent - 从原始问题中无法理解。无论如何,一个疯狂的猜测:您选择了 Nexus 4 相机不支持的图片大小和/或格式。
  • @AlexCohn 抱歉,我认为在主题中提到 Camera Api 会自动排除我正在使用意图,再次为此道歉。我实际上根本没有选择大小/格式,但是在尝试解决这个问题时,我在代码中添加了(我已经包含在上面的编辑中)但它对我不起作用,所以我真的不知道是什么要做,我之后压缩图像,但据我所知,来自 onpicturetaken 的字节 [] 是问题!
  • 那么,您设备上的supportedPictureSize.get(1) 是什么?是后置摄像头还是前置摄像头?
  • 这只是支持的图片大小..我还有代码来检查相机并打开相机 0...这是后置摄像头...所以一切都很好...令人难以置信令人沮丧
  • 请参阅stackoverflow.com/questions/16652712/… 的讨论。 Nexus 4 列出了一些错误的图片尺寸,但我不确定这些是否在最新的软件升级中没有改变。

标签: android image camera android-camera lg


【解决方案1】:
Intent captureIntent = new Intent(
                            MediaStore.ACTION_IMAGE_CAPTURE);
                    captureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
                            uri);
                    startActivityForResult(captureIntent, TAKE_PHOTO);

这将有助于您捕获高质量的图像并存储在 uri 指向的文件中。 (如果您没有在意图中添加 MediaStore.EXTRA_OUTPUT,它将返回低质量的图像)。

【讨论】:

  • 但我们无法从我们的应用更改相机应用分辨率
  • @Nooh 我正在使用相机 api,我没有使用捕获意图。
  • @praveen 是的,我知道,所以我很困惑为什么会这样,当我拍照并显示图像预览时,它看起来很好,但是,当我检查字节的大小时[] 来自 jpegcallback 与三星设备捕获的数据相比,它真的很小
  • 有人有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多