I am developing a camera app. Picture is being successfully taken and saved. The issue is saved image appeared rotated when viewed. I came across several examples on internet to rotate the saved image. My code is as follows:
@Override
public void onPictureTaken(byte[] data, Camera camera) {
Bitmap bitmap = BitmapFactory.decodeByteArray(data , 0, data
.length);
try {
ContentValues v = new ContentValues();
v.put(MediaStore.Images.Media.TITLE,
"test"+System.currentTimeMillis());
v.put(MediaStore.Images.Media.DISPLAY_NAME,
"test"+System.currentTimeMillis());
v.put(MediaStore.Images.Media.DESCRIPTION, "Test picture");
v.put(MediaStore.Images.Media.DATE_ADDED,
System.currentTimeMillis());
v.put(MediaStore.Images.Media.DATE_TAKEN,
System.currentTimeMillis());
v.put(MediaStore.Images.Media.DATE_MODIFIED,
System.currentTimeMillis());
v.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
v.put(MediaStore.Images.Media.ORIENTATION,90);
Uri uriTarget =
getContentResolver().
insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, v);
String imagePath = getRealPathFromURI(uriTarget);
ExifInterface ei = new ExifInterface(imagePath);
int orientation =
ei.getAttributeInt(ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_NORMAL);
switch(orientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
data= RotateBitmap(bitmap, 90);
break;
case ExifInterface.ORIENTATION_ROTATE_180:
data= RotateBitmap(bitmap, 180);
break;
case ExifInterface.ORIENTATION_ROTATE_270:
data= RotateBitmap(bitmap, 180);
break;
// etc.
}
OutputStream imageFileOS;
imageFileOS =
getContentResolver().openOutputStream(uriTarget);
imageFileOS.write(data);
imageFileOS.flush();
imageFileOS.close();
Log.d("URI",uriTarget.toString());
} catch (Exception e) {
e.printStackTrace();
}
finally
{
camera.startPreview();
}
}
};
Here is the function to get path of saved image:
public String getRealPathFromURI(Uri contentUri) {
String[] proj = { MediaStore.Images.Media.DATA };
CursorLoader loader = new CursorLoader(this, contentUri, proj, null,
null, null);
Cursor cursor = loader.loadInBackground();
int column_index =
cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
The issue is ExifInterface ei = new ExifInterface(imagePath); says E/JHEAD﹕ can't open '/storage/emulated/10/Pictures/1442234633142.jpg'
Check Full source code: https://github.com/SohaibFarooqi/CameraFilter/