[英]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.