안녕하세요 imageview에 bitmap을 이용하여 resize후에 fit_xy를 적용하는데
왜 이미지가 90도 회전되는지 도통 모르겠습니다.
이미지 쪽이나 비트맵은 처음 다뤄 봐서 당췌 이해가 안되네요..
고수님들 도움 부탁드립니다.
코드는 다음과 같습니다.
BitmapFactory.Options bfo = new BitmapFactory.Options();
bfo.inJustDecodeBounds = true;
BitmapFactory.decodeFile(strFilePath, bfo);
bfo.inJustDecodeBounds = false;
bfo.inPurgeable = true;
bfo.inDither = false;
final Bitmap bitmap = BitmapFactory.decodeFile(strFilePath, bfo);
Bitmap bm = Bitmap.createScaledBitmap(bitmap, 700, 900, true);
ImageView img_view2 = (ImageView)findViewById(R.id.img_view2);
img_view2.setScaleType(ScaleType.FIT_XY);
img_view2.setImageBitmap(bm);
이미지는 갤러리를 불러서 가져오는데
갤러리는 폰으로 찍은 사진입니다.
사진 정보는 다음과 같습니다.
사진크기 : 3264 * 2448
2.13MB
찍은사진이라면 사진메타데이터에 회전정보있는데 그걸로 알아서 돌리시면됩니다.....제가 썼던거는
try
{
ExifInterface exif = new ExifInterface(array.get(i));
int exifOrientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
int exifDegree = Util.exifOrientationToDegrees(exifOrientation);
originalBitmap = Util.rotate(originalBitmap, exifDegree);
thumbBitmap = Util.rotate(thumbBitmap, exifDegree);
}
catch (IOException e)
{
e.printStackTrace();
}
public static int exifOrientationToDegrees(int exifOrientation)
{
if(exifOrientation == ExifInterface.ORIENTATION_ROTATE_90)
{
return 90;
}
else if(exifOrientation == ExifInterface.ORIENTATION_ROTATE_180)
{
return 180;
}
else if(exifOrientation == ExifInterface.ORIENTATION_ROTATE_270)
{
return 270;
}
return 0;
}
public static Bitmap rotate(Bitmap bitmap, int degrees)
{
if(degrees != 0 && bitmap != null)
{
Matrix m = new Matrix();
m.setRotate(degrees, (float) bitmap.getWidth() / 2,
(float) bitmap.getHeight() / 2);
try
{
Bitmap converted = Bitmap.createBitmap(bitmap, 0, 0,
bitmap.getWidth(), bitmap.getHeight(), m, true);
if(bitmap != converted)
{
bitmap.recycle();
bitmap = converted;
}
}
catch(OutOfMemoryError ex)
{
ex.printStackTrace();
}
}
return bitmap;
}
이정도네요
원래 돌아간 이미지를 보정해서 갤러리뷰가 똑바르게 보여줘서 그렇습니다.
이런 이미지는 보통 웹에 올리면 돌아가서 올라가더라구요.