Android:我无法在SurfaceView(三星Galaxy S GT-i9000)上使用前置摄像头拍照

时间:2011-04-06 11:46:20

标签: android photo image surfaceview

我使用三星Galaxy s的前置摄像头获得绿屏,但预览正确。使用Back-Camera可以制作照片。

问题出在哪里?

这是我的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();
}

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

我认为问题可能是结果的处理。我猜你是将原始捕获的包含原始图像数据的字节数组发送到具有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();

希望这会有所帮助......

答案 2 :(得分:0)

您是否尝试设置此参数:

mParameters.setPreviewFormat(PixelFormat.JPEG);

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