在自己的相机中预览图像 - Android

时间:2014-02-12 10:47:35

标签: android layout android-camera preview

我正在做一个应用程序,需要设备(通常是平板电脑)才能处于横向状态,但图片必须在屏幕上以纵向显示。

直到这里,我已经完成了。现在,当我拍照时,“预览”图像显示在landsacape中,看起来很奇怪。

见图片看我的意思:

拍摄前如何看待图片: enter image description here

拍摄照片之后: enter image description here

我不知道如何解决它

多数表面视图:

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

        // stop Preview Before making changes
        try {
            mCamera.stopPreview();
        } catch (Exception e) {
            // ignored: is trying to stop a non-existent preview

        }

        try {
            mCamera.setPreviewDisplay(mHolder);
            mCamera.startPreview();
        } catch (Exception e) {
            Log.d("CAMERAPREVIEW", "Error starting camera preview : " + e.getMessage());
        }

    }

方法覆盖了

private PictureCallback mPicture = new PictureCallback() {

        @Override
        public void onPictureTaken(byte[] data, Camera camera) {

            File pictureFile = getOutputMediaFile(MEDIA_TYPE_IMAGE);
            if (pictureFile == null) {
                Log.d(TAG, "Error creating media file, check storage permissions: ");
                return;
            }

            try {
                FileOutputStream fos = new FileOutputStream(pictureFile);
                fos.write(data);
                fos.close();

//                              Not used for the moment
//              Intent returnIntent = new Intent();
//              setResult(RESULT_CANCELED, returnIntent);
//              finish();
            } catch (FileNotFoundException e) {
                Log.d(TAG, "File not found: " + e.getMessage());
            } catch (IOException e) {
                Log.d(TAG, "Error accessing file: " + e.getMessage());
            }
        }
    };

1 个答案:

答案 0 :(得分:0)

您可以使用Camera.setDisplayOrientaion()旋转SurfaceView上的预览。但这不会影响捕获的图像。您的帖子没有透露您如何从文件中显示捕获的图像(我假设这是您在second picture中显示的内容)。如果将其作为位图加载到ImageView中,则可以请求旋转位图。

看起来您的图片尺寸与预览的宽高比不同。我建议您查看最近的讨论here

但也许我误解了你在做什么。也许您的问题是您没有在onPicturetaken()重启预览?