Android Camera Preview在预览中拉伸,而不是在拍照后

周杰伦

我有一个应用程序,它以人像模式拍摄照片,并且一切正常,除了预览的大小与拍照后的图像大小不同。预览似乎失真且模糊,但充满了整个屏幕。拍照后,图像清晰,但比设备高度短或宽度更小(取决于所使用的设备)。

下面是一些图像示例和一些我正在使用的代码。

拍照之前: 图片1

拍照后: 图片2

相机预览代码以纵向显示:

protected int getRotationDegrees() {
    android.hardware.Camera.CameraInfo info = new android.hardware.Camera.CameraInfo();
    android.hardware.Camera.getCameraInfo(0, info);
    int rotation = ((WindowManager) mContext
            .getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay()
            .getRotation();
    int degrees = 0;

    switch (rotation) {
        case Surface.ROTATION_0:
            degrees = 0;
            break;
        case Surface.ROTATION_90:
            degrees = 90;
            break;
        case Surface.ROTATION_180:
            degrees = 180;
            break;
        case Surface.ROTATION_270:
            degrees = 270;
            break;
    }

    int result = (info.orientation - degrees + 360) % 360;
    return result;
}

拍照后旋转图像的代码:

Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {

    @Override
    public void onPictureTaken(byte[] data, Camera camera) {
        Bitmap pictureBitmap = null;

        pictureBitmap = BitmapFactory.decodeByteArray(data, 0, data.length);

        int rotationDegrees = mCameraPreview.getRotationDegrees();
        //mRotation = setCameraDisplayOrientation(MainActivity.this, Camera.CameraInfo.CAMERA_FACING_BACK, mCamera);
        Matrix matrix = new Matrix();
        matrix.postRotate(rotationDegrees);

        //Bitmap scaledBitmap = Bitmap.createScaledBitmap(pictureBitmap ,previewWidth ,previewHeight ,true);
        //Bitmap rotatedBitmap = Bitmap.createBitmap(scaledBitmap , 0, 0, scaledBitmap.getWidth(), scaledBitmap.getHeight(), matrix, true);
        Bitmap rotatedBitmap = Bitmap.createBitmap(pictureBitmap , 0, 0, pictureBitmap.getWidth(), pictureBitmap.getHeight(), matrix, true);

        //rotatedBitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
        ImageView previewImage = (ImageView) findViewById(R.id.preview_image);
        previewImage.setImageBitmap(rotatedBitmap);
        mCameraPreview.setVisibility(View.INVISIBLE);
        mButtonCapture.setVisibility(View.INVISIBLE);
        //flCameraPreview.setVisibility(View.INVISIBLE);
    }
};

有人遇到过这个问题吗?我仍在尝试了解相机API。提前致谢!

编辑:我用来选择预览和图片大小的代码。

private Camera.Size getOptimalSize(List<Camera.Size> sizes, int h, int w) {
    final double ASPECT_TOLERANCE = 0.05;
    double targetRatio = (double) w/h;

    if (sizes == null) {
        return null;
    }

    Camera.Size optimalSize = null;

     double minDiff = Double.MAX_VALUE;

    int targetHeight = h;

    for (Camera.Size size : sizes) {
        double ratio = (double) size.width / size.height;
        if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE) continue;
        if (Math.abs(size.height - targetHeight) < minDiff) {
            optimalSize = size;
            minDiff = Math.abs(size.height - targetHeight);
        }
    }

    if (optimalSize == null) {
        minDiff = Double.MAX_VALUE;
        for (Camera.Size size : sizes) {
            if (Math.abs(size.height - targetHeight) < minDiff) {
                optimalSize = size;
                minDiff = Math.abs(size.height - targetHeight);
            }
        }
    }

    return optimalSize;
}
周杰伦

在另一篇解决我的问题的帖子中找到了此评论

它更改视图的大小,以便在始终尝试填充屏幕时不会拉伸图像。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android Camera2预览被拉伸

来自分类Dev

Android Camera Preview不是全屏

来自分类Dev

使用Android Camera Preview拍照并保存在SQL数据库中时崩溃了

来自分类Dev

在Android手机的Camera应用程序中拍照后,onActivityResult中的Null Pointer异常

来自分类Dev

如何在 Android Camera2 中不断拍照?

来自分类Dev

照片捕获问题后的Android Camera App预览

来自分类Dev

Camera PreviewView在某些Android设备中被拉伸

来自分类Dev

Android Camera2 空预览图像

来自分类Dev

Android Camera Preview无法全屏显示

来自分类Dev

在Camera Preview中更改对比度-Android

来自分类Dev

在Camera Preview中更改对比度-Android

来自分类Dev

Android:在不调用本地Camera应用的情况下拍照

来自分类Dev

将视频保存为输入而不是android中的Camera

来自分类Dev

使用Android camera2获得全屏预览

来自分类Dev

Android:具有预览回调功能的Camera Asynctask

来自分类Dev

Android:想要在Camera预览上放置轮廓叠加

来自分类Dev

从Android Camera获取灰度位图的最快方法(预览)

来自分类Dev

Android:带有预览回调的Camera Asynctask

来自分类Dev

Camera Preview无法重新初始化=>一个好的Android Camera实现?

来自分类Dev

Camera Preview无法重新初始化=>一个好的Android Camera实现?

来自分类Dev

如何在Android Camera Preview中使用OpenCV方法

来自分类Dev

保存之前如何在android camera预览应用中旋转图像?

来自分类Dev

Android Camera示例NullPointerException

来自分类Dev

Android Camera takePicture()失败

来自分类Dev

Android Camera结果崩溃

来自分类Dev

在Android的Camera2中手动对焦

来自分类Dev

Camera2 Android中的曝光补偿方法

来自分类Dev

Camera.open()在android中不起作用

来自分类Dev

如何在Android Camera API设置中设置ISO?

Related 相关文章

  1. 1

    Android Camera2预览被拉伸

  2. 2

    Android Camera Preview不是全屏

  3. 3

    使用Android Camera Preview拍照并保存在SQL数据库中时崩溃了

  4. 4

    在Android手机的Camera应用程序中拍照后,onActivityResult中的Null Pointer异常

  5. 5

    如何在 Android Camera2 中不断拍照?

  6. 6

    照片捕获问题后的Android Camera App预览

  7. 7

    Camera PreviewView在某些Android设备中被拉伸

  8. 8

    Android Camera2 空预览图像

  9. 9

    Android Camera Preview无法全屏显示

  10. 10

    在Camera Preview中更改对比度-Android

  11. 11

    在Camera Preview中更改对比度-Android

  12. 12

    Android:在不调用本地Camera应用的情况下拍照

  13. 13

    将视频保存为输入而不是android中的Camera

  14. 14

    使用Android camera2获得全屏预览

  15. 15

    Android:具有预览回调功能的Camera Asynctask

  16. 16

    Android:想要在Camera预览上放置轮廓叠加

  17. 17

    从Android Camera获取灰度位图的最快方法(预览)

  18. 18

    Android:带有预览回调的Camera Asynctask

  19. 19

    Camera Preview无法重新初始化=>一个好的Android Camera实现?

  20. 20

    Camera Preview无法重新初始化=>一个好的Android Camera实现?

  21. 21

    如何在Android Camera Preview中使用OpenCV方法

  22. 22

    保存之前如何在android camera预览应用中旋转图像?

  23. 23

    Android Camera示例NullPointerException

  24. 24

    Android Camera takePicture()失败

  25. 25

    Android Camera结果崩溃

  26. 26

    在Android的Camera2中手动对焦

  27. 27

    Camera2 Android中的曝光补偿方法

  28. 28

    Camera.open()在android中不起作用

  29. 29

    如何在Android Camera API设置中设置ISO?

热门标签

归档