Android: я не могу сделать снимок с фронтальной камерой на SurfaceView (Samsung Galaxy S GT-i9000) - PullRequest
0 голосов
/ 06 апреля 2011

Я получаю зеленый экран с фронтальной камерой от Samsung 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();
}

Ответы [ 3 ]

1 голос
/ 18 мая 2011

У меня была такая же проблема, но я не нашел реального решения.

В итоге я выбрал кадры из предварительного просмотра камеры. У этого есть некоторые проблемы - например, изображения с большей вероятностью будут размытыми.

Соответствующий метод для захвата кадров предварительного просмотра: Camera.setOneShotPreviewCallback.

0 голосов
/ 09 июня 2011

Вы пытались установить этот параметр:

mParameters.setPreviewFormat(PixelFormat.JPEG);

Мне это помогло, но на Motorola Droid возникли проблемы.

0 голосов
/ 11 апреля 2011

Я думаю, что проблема может заключаться в обработке результата. Я предполагаю, что вы отправляете первоначально захваченный байтовый массив, содержащий необработанные данные изображения, в файл с расширением 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();

Надеюсь, это поможет ...

...