【问题标题】:Android:I can't take a photo with the front facing camera on SurfaceView (Samsung Galaxy S GT-i9000 )Android:我无法在 SurfaceView 上使用前置摄像头拍照(Samsung Galaxy S GT-i9000)
【发布时间】:2011-04-06 11:46:20
【问题描述】:

三星 Galaxy s 的前置摄像头出现绿屏,但预览是正确的。使用后置摄像头,我可以拍照。

问题出在哪里?

这是我的 PictureCallback:

    public void onIvButtonShutterClick(View view) {

    PictureCallback pictureCallback = new PictureCallback() {

        @Override
        public void onPictureTaken(byte[] data, Camera camera) {
            try {
                File picture = new File(My_Camera.this.getFilesDir()
                        + "/bild.jpg");
                FileOutputStream pictureOut = new FileOutputStream(picture);
                pictureOut.write(data);
                pictureOut.flush();
                pictureOut.close();
                Toast.makeText(
                        My_Camera.this,
                        getResources().getString(
                                R.string.tx_my_camera_save)
                                + "\n" + picture.getAbsolutePath(),
                        Toast.LENGTH_SHORT).show();
            } catch (Exception e) {
                e.printStackTrace();
            }
            //mCamera.startPreview(); // Preview wird weiter ausgeführt
        }
    };

    mCamera.takePicture(null, null, pictureCallback);
}

我使用前置摄像头访问:

    @Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
        int height) {

        mParameters = mCamera.getParameters();

        mParameters.set("camera-id", 2);
        mParameters.setPictureFormat(PixelFormat.JPEG);
        mCamera.setDisplayOrientation(270);
        mCamera.setParameters(mParameters);
        mCamera.startPreview();
}

【问题讨论】:

    标签: android photo image surfaceview


    【解决方案1】:

    我遇到了同样的问题,但从未找到真正的解决方案。

    我最终使用的是从相机预览中抓取帧。这有一些问题 - 例如,图片更容易模糊。

    抓取预览帧的相关方法是Camera.setOneShotPreviewCallback

    【讨论】:

    • 是的,我有同样的解决方案。如果你找到更好的解决方案。让我知道;-).....
    【解决方案2】:

    我认为问题可能出在结果的处理上。我猜您正在将包含原始图像数据的最初捕获的字节数组发送到具有 jpg 扩展名的文件,但字节数组不在 jpg 数据中(即缺少标题和未压缩的内容)。 这是我拥有的一些代码(您看到的 MeToo 项目)的相关部分,imageData 是原始内容:

            Bitmap backCameraImage = BitmapFactory.decodeByteArray(imageData,
                    0, imageData.length).copy(Bitmap.Config.RGB_565, true);
            FileOutputStream out = null;
            out = new FileOutputStream(file);
            backCameraImage.compress(Bitmap.CompressFormat.JPEG, 100, out);
            out.close();
    

    希望这会有所帮助...

    【讨论】:

    • 我仍然收到错误 :-(... 这是我的 Logcat: ERROR/SecCamera(11475): ERR(fimc_v4l2_g_ctrl):VIDIOC_G_CTRL failed ERROR/SecCamera(11475): cancelAutofocus(): getAutoFocusResult () 失败 ERROR/SecCamera(11475): cancelAutofocus() end, 0, -1 ERROR/SecCamera(11475): stopPreview() ERROR/SecCamera(11475): fimc_v4l2_streamoff() ERROR/CameraHardwareSec(11475): stopPreview()结束
    • 你说同样的代码适用于后置摄像头,也就是说,如果你注释掉 mParameters.set("camera-id",2);拍照正确吗?
    • 我不明白为什么它适用于一台相机而不适用于另一台......我建议使用停止和开始预览请求,因为我记得这给我带来了一些麻烦。 ..(并确保在更改参数之前停止)
    • 是的,相同的代码适用于后置摄像头。这是我的示例代码:megaupload.com/?d=COH7HCJJ 也许你发现了错误...谢谢!
    • 恐怕我找不到问题的根源...您可以尝试以下几件事: - 将回调代码声明移至类级别。 - 将 autofocus 参数设置为 false(错误说明了这一点)。 - 确保在 onShutterClick() 和 onPictureTaken() 之间没有调用 stopPreview()。我可以将我的代码邮寄给你以访问前置摄像头,但这有点乱......
    【解决方案3】:

    您是否尝试设置此参数:

    mParameters.setPreviewFormat(PixelFormat.JPEG);
    

    它帮助了我,但在摩托罗拉 Droid 上引起了问题。

    【讨论】:

      猜你喜欢
      • 2012-07-22
      • 1970-01-01
      • 1970-01-01
      • 2015-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-13
      相关资源
      最近更新 更多