Taking picture with camera intent rotate picture in portrait mode android
android, android-camera, android-camera-intent
Solution
Pass your taken picture and SDCard path of that picture into the following method which will return the correct oriented picture...
private Bitmap imageOreintationValidator(Bitmap bitmap, String path) {
ExifInterface ei;
try {
ei = new ExifInterface(path);
int orientation = ei.getAttributeInt(ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_NORMAL);
switch (orientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
bitmap = rotateImage(bitmap, 90);
break;
case ExifInterface.ORIENTATION_ROTATE_180:
bitmap = rotateImage(bitmap, 180);
break;
case ExifInterface.ORIENTATION_ROTATE_270:
bitmap = rotateImage(bitmap, 270);
break;
}
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
private Bitmap rotateImage(Bitmap source, float angle) {
Bitmap bitmap = null;
Matrix matrix = new Matrix();
matrix.postRotate(angle);
try {
bitmap = Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(),
matrix, true);
} catch (OutOfMemoryError err) {
err.printStackTrace();
}
return bitmap;
}
Problem
Picture was taken successfully with camera but in portrait mode on samsung galaxy s3 the picture gets rotated. How can i solve this issue. Camera intent is as follows: ``` Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(xdestination)); startActivityForResult(intent, CAMERA_PIC_REQUEST); ``` In activity for result ``` if (requestCode==CAMERA_PIC_REQUEST){ // Bitmap bm = (Bitmap) data.getExtras().get("data"); Uri photo_uri = Uri.fromFile(xdestination); Editer.PHOTO_FROM=11; Bitmap decodeSampledBitmapFromFile=null; try { decodeSampledBitmapFromFile = decodeUri(photo_uri); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } ByteArrayOutputStream bytes = new ByteArrayOutputStream(); decodeSampledBitmapFromFile.compress(Bitmap.CompressFormat.JPEG,100, bytes); File f = new File(Environment.getExternalStorageDirectory(), "user_image.jpg"); try { if(f.exists()) f.delete(); f.createNewFile(); FileOutputStream fo = new FileOutputStream(f); fo.write(bytes.toByteArray()); fo.close(); } catch (IOException e) { e.printStackTrace( ); Log.d("ERROR", e.toString()); } } ```