Android CameraSource对多个设备的工作方式不同,不会旋转图像

时间:2016-04-03 19:56:28

标签: android image bitmap rotation android-camera

我有两个Android设备。 CameraSource对它们的工作方式不同。 对于一台设备,保存后照片的方向是正确的,无需旋转。但是对于另一台设备保存了错误方向的照片。

我创建了CameraSource:

source = new CameraSource.Builder(context, detector) .setRequestedPreviewSize(640, 480) .setFacing(cameraId) .setRequestedFps(30.0f) .setAutoFocusEnabled(true) .build();

我创建了带动作的按钮:

source.takePicture(null, new CameraSource.PictureCallback() { @Override public void onPictureTaken(byte[] bytes) { File folder = PhotoUtils.getGalleryFolder(); writeFileIntoDevice(bytes, folder.getAbsolutePath()); } });

private String writeFileIntoDevice(byte[] data, String path) {
    Bitmap orignalImage = BitmapFactory.decodeByteArray(data, 0, data.length);

    SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd_hhmmss");
    String fileName = formatter.format(new Date());

    File file = new File(path, fileName + ".jpg");

    try (FileOutputStream stream = new FileOutputStream(file)) {
        orignalImage.compress(Bitmap.CompressFormat.JPEG, 80, stream);
        Log.i(PhotoCreator.class.getName(), "photo was saved to " + path);
    } catch (Exception e) {
        Log.e(PhotoCreator.class.getName(), "can't save photo", e);
    }

    return file.getAbsolutePath();
}

照片的方向在设备上有所不同,我尝试在保存后旋转位图,但没有成功。

我试过这个:Controlling the camera to take pictures in portrait doesn't rotate the final images

而且:Android camera resulted image should be rotated after the capture?

如何正确旋转所有设备的图像?

1 个答案:

答案 0 :(得分:1)

使用两种不同的设备,我得到两个不同的结果。我刚刚开始拍照。使用一台设备,我可以正确地获得视频预览,使用另一台设备,我可以获得顺时针旋转90度的视频预览。我的应用程序在Android平板电脑上处于风景中。

我没有找到解决此相机旋转问题的任何解决方案。

    cameraView = (SurfaceView)findViewById(R.id.cameraView);

    barcodeDetector = new BarcodeDetector.Builder(this)
            .setBarcodeFormats(Barcode.QR_CODE)
            .build();

    cameraSource = new CameraSource
            .Builder(this, barcodeDetector)
            .setAutoFocusEnabled(true)
            .setRequestedFps(60)
            .setRequestedPreviewSize(640, 480)
            .setFacing(CameraSource.CAMERA_FACING_FRONT)
            .build();

    cameraSource.start(holder);