当前位置: 首页 > 知识库问答 >
问题:

三星Galaxy SIII相机问题。onPictureTaken()返回隔行扫描图像,而不是正确的捕获图像

许远航
2023-03-14

我们有一个应用程序,利用后方'相机'捕捉项目图像。到目前为止,我们测试的所有设备在捕捉图像方面都正常工作,直到三星Galaxy SIII (S3)。

仅在Samsung Galaxy SIII上,我们观察到Camera.onPictureTaken()返回的原始图像似乎是交错的,而不是正确的捕获图像。调试每个摄像机参数设置,确定以下参数设置器导致了问题。如果我们没有在参数上显式地设置PictureSize(),那么它将按预期工作:

parameters.setPictureSize(targetPictureSize);  

默认情况下,parameters.getPictureSize()返回为[w,h]=[3264,2448]

“targetPictureSize”是根据从下面返回的最接近的匹配大小确定的,在这种情况下,我们使用[w,h]=[1600,1200]大小作为“targetPictureSize”

camera.getParameters().getSupportedPictureSizes();

有人知道原因和解决方法吗?

共有2个答案

游皓
2023-03-14

我想这不会有一个好的答案或理由。我只能怪三星没有正确实现Camera.getParameters()。setPictureSize()。

以下是我的解决方法,通过检查S3模型名称而不是调用setPictureSize()

       // Source - http://en.wikipedia.org/wiki/Samsung_Galaxy_S_III
       String s3ModelNames[] = { "XXXXXXXXXXXXXXXX", // Place holder
                "SAMSUNG-SGH-I747", // AT&T
                "SAMSUNG-SGH-T999", // T-Mobile
                "SAMSUNG-SGH-N064", // Japan
                "SAMSUNG-SCH-R530", // US Cellular
                "SAMSUNG-SCH-I535", // Verizon
                "SAMSUNG-SPH-L710", // Sprint
                "SAMSUNG-GT-I9300", // International
                "SGH-I747", // AT&T
                "SGH-T999", // T-Mobile
                "SGH-N064", // Japan
                "SCH-R530", // US Cellular
                "SCH-I535", // Verizon
                "SPH-L710", // Sprint
                "GT-I9300"  // International
       };

       List<String> s3ModelList = Arrays.asList(s3ModelNames);

       if (s3ModelList.contains(deviceModel)) {
          // DEVICE SPECIFIC WORK AROUND for Samsung Galaxy S3
          // SKIP calling parameters.setPictureSize() Samsung Galaxy SIII phone (Confirmed on AT&T, Verizon, Sprint) due the Camera image are interlaced when setPictureSize() are set to other than default.
       }
耿俊彦
2023-03-14

当您在预览处于活动状态时,使用与之前配置的(或默认值)不同的图片大小调用camera.setParameters时,似乎会发生此问题。解决方案是在开始预览或停止预览之前设置图片大小,设置参数,然后重新启动预览。

parameters.setPictureSize(1600, 1200);
...
camera.stopPreview();
camera.setParameters(parameters);
camera.startPreview();

技术说明:

隔行扫描的原因似乎是从照相机返回的图像以默认分辨率 (3264x2448) 捕获,但被标记为使用 setPictureSize 指定的分辨率。结果,当显示这样的图像时,捕获图像中的每一行像素都显示为(默认分辨率/指定分辨率)像素行。当图片尺寸为1600x1200时,这将导致图像出现隔行扫描,而在其他分辨率(例如640x480)下,图像将显示为完全损坏。

 类似资料:
  • 我已经开发了一个应用程序来拍摄一张照片并保存在画廊里。我在网上搜索过,我能练习的最简单的方法就是使用。下面是从相机上拍照的代码。注意,我在这个类中使用的是fragment。 获取捕获的图像并将其转换为字符串 我将字符串保存到全局变量中,以便其他活动可以访问它。在另一个活动中,我有一个按钮,通过访问图像字符串将图像保存到文件夹/图库中。 它可以将图像保存到文件夹/图库中......但是图像质量很低.

  • 我试图做一个简单的应用程序,使用系统相机应用程序来拍照。我已经在android版本6中测试了我的应用程序,我的应用程序成功打开了设备的摄像头。但在一些android v6设备(如三星Galaxy A3)中,我遇到了以下安全异常: 我已经在我的代码中添加了权限检查: 稍后我称之为捕获图像: 从日志中,我看到captureImage第203行调用了startActivityForResult。既然我已

  • 我正试图从IP摄像机实时捕捉图像。该流在VLC中工作得非常好,但是OpenCV的似乎混淆并损坏了传入的图像,以至于无法识别。 同样,从文件捕获工作很好,但不是实时流。如果它有不同,我使用rtsp连接URL;我也尝试了两个不同型号的相机(不同品牌),问题仍然存在。 此外,(我假设)编解码器正在输出以下几种错误:和。 我能做什么?

  • 我有以下代码,它要求用户从照片应用程序中选择一个图像或通过相机应用程序捕捉一个图像: 和OnActivityResult的代码:

  • 我已经被困在相机里6天了,但没有得到任何适当的解决方案。当我通过相机意图捕获图像时,图像正在旋转。我试图修复方向,但有时它没有在onActivityResult()中给出位图值。当我尝试在ImageView中设置图像时,它会显示一个黑色屏幕。这是我的密码请帮帮我- 我得到的图像在横向模式,但不是在potrait模式。相机预览在拍摄图像后自动旋转90度。