为什么图像在imageView中旋转90度?以及如何解决它?
图库中的所有图片在imageView中都没有旋转90度。
我不知道为什么有些图像会在imageView中旋转90度。
@Override
protected void onActivityResult(int requestCode , int resultCode , Intent data){
if(requestCode == 100){
if(resultCode == Activity.RESULT_OK){
try{
ImageView imageView = (ImageView)View.inflate(this, R.layout.imagelayout, null);
Uri imgUri = data.getData();
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), imgUri);
int height = bitmap.getHeight();
int width = bitmap.getWidth();
int newHeight = height;
int newWidth = width;
float rate = 0.0f;
if(width > height ){
if(imageFlipper.getWidth() < width ){
rate = imageFlipper.getWidth() / (float) width ;
newHeight = (int) (height * rate);
newWidth = imageFlipper.getWidth();
}
}else{
if(imageFlipper.getHeight() < height ){
rate = imageFlipper.getHeight() / (float) height ;
newWidth = (int) (width * rate);
newHeight = imageFlipper.getHeight();
}
}
Bitmap reSize = Bitmap.createScaledBitmap(bitmap , newWidth , newHeight,true);
imageView.setImageBitmap(reSize);
//imageView.setImageURI(imgUri);
imageFlipper.addView(imageView);
imageFlipper.setDisplayedChild(imageFlipper.getChildCount() - 1);
}catch(Exception e){
e.printStackTrace();
}
}
}
}
答案 0 :(得分:1)
在某些设备中,启动相机时,方向会发生变化。在我的一个应用程序中,我也遇到了这个问题。为了解决这个问题,我们需要找到方向并相应地旋转图片。
// capture image orientation
public int getCameraPhotoOrientation(Context context, Uri imageUri,
String imagePath) {
int rotate = 0;
try {
context.getContentResolver().notifyChange(imageUri, null);
File imageFile = new File(imagePath);
ExifInterface exif = new ExifInterface(imageFile.getAbsolutePath());
int orientation = exif.getAttributeInt(
ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_NORMAL);
switch (orientation) {
case ExifInterface.ORIENTATION_ROTATE_270:
rotate = 270;
break;
case ExifInterface.ORIENTATION_ROTATE_180:
rotate = 180;
break;
case ExifInterface.ORIENTATION_ROTATE_90:
rotate = 90;
break;
}
Log.i("RotateImage", "Exif orientation: " + orientation);
Log.i("RotateImage", "Rotate value: " + rotate);
} catch (Exception e) {
e.printStackTrace();
}
return rotate;
}
我们需要使用返回的整数来设置Imageview的角度。
int rotateImage = getCameraPhotoOrientation(this, uriLargeImage,
mediaFile.getAbsolutePath());
articleview.setRotation(rotateImage); // articleview is ImageView
所以基本上,请在拍摄时找到照片的方向。这是在ExifInterface中。使用此信息进行旋转。
希望这会有所帮助。一切顺利。
答案 1 :(得分:1)
如前所述,它会自动执行。我修复此问题的方法是使用此ImageCropper,它会自动反向旋转,这真是太神奇了。
点击此处:https://github.com/ArthurHub/Android-Image-Cropper
因此,不仅可以裁剪和旋转图像,而且还可以解决问题!
答案 2 :(得分:0)
您必须在拍摄照片的图像视图中设置旋转度:
imageView.setRotation(getCameraPhotoOrientation(filepath));
imageView.setImageURI( Uri.fromFile(filepath));
public static int getCameraPhotoOrientation(String imagePath) {
int rotate = 0;
try {
ExifInterface exif = null;
try {
exif = new ExifInterface(imagePath);
} catch (IOException e1) {
e1.printStackTrace();
}
int orientation = exif.getAttributeInt(
ExifInterface.TAG_ORIENTATION, 0);
switch (orientation) {
case ExifInterface.ORIENTATION_ROTATE_180:
rotate = 180;
break;
case ExifInterface.ORIENTATION_ROTATE_90:
rotate = 90;
break;
case ExifInterface.ORIENTATION_ROTATE_270:
rotate = 90;
break;
default:
rotate = 0;
}
} catch (Exception e) {
e.printStackTrace();
}
return rotate;
}
答案 3 :(得分:0)
/** * 顺时针和逆时针旋转位图 */
btn_clock = (Button) findViewById(R.id.btn_clockWise);
btn_clock.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Matrix mMatrix = new Matrix();
Matrix mat=img.getImageMatrix();
mMatrix.set(mat);
mMatrix.setRotate(90);
bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
bitmap.getHeight(), mMatrix, false);
img.setImageBitmap(bitmap);
}
});
btn_antiClock = (Button) findViewById(R.id.btn_AnticlockWise);
btn_antiClock.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Matrix mMatrix = new Matrix();
Matrix mat=img.getImageMatrix();
mMatrix.set(mat);
mMatrix.setRotate(-90);
bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
bitmap.getHeight(), mMatrix, false);
img.setImageBitmap(bitmap);
}
});