簡體   English   中英

捕獲某些Android設備上旋轉的相機圖片

[英]captures camera picture rotates on some android devices

在某些設備(Nexus 9,Nexus S等)上,相機會將旋轉的圖片加載到ImageView 我試圖用ExifInterface修復它,但沒有成功。 有人對此代碼示例有想法嗎?

編譯的SDK版本是25
最低SDK版本為15

public void capturePhoto(String targetFilename) {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_IMAGE_CAPTURE) {
        Bundle extras = data.getExtras();
        Bitmap imageBitmap = (Bitmap) extras.get("data");
        mImageView.setImageBitmap(imageBitmap);
    }
}
}

使用以下代碼:

@Override
    public void onPictureTaken(byte[] data, Camera camera) {
int rotation = getPhotoRotation();
        rotatePicture(rotation, data);
        savePicture();
        setSafeToTakePhoto(true);
    }

從此處獲取設備的旋轉:

private int getPhotoRotation() {
        int rotation;
        int orientation = mOrientationListener.getRememberedNormalOrientation();
        CameraInfo info = new CameraInfo();
        Camera.getCameraInfo(mCameraID, info);

        if (info.facing == CameraInfo.CAMERA_FACING_FRONT) {
            rotation = (info.orientation - orientation + 360) % 360;
        } else {
            rotation = (info.orientation + orientation) % 360;
        }

        return rotation;
    }
     private int getRememberedNormalOrientation() {
            rememberOrientation();
            return mRememberedNormalOrientation;
        }
     private void rememberOrientation() {
            mRememberedNormalOrientation = mCurrentNormalizedOrientation;
        }

如果您不想識別移動設備旋轉,請使用上述代碼檢測移動設備方向並按設備旋轉保存圖像。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM