public static Android.Graphics.Bitmap rotateBitmap(Android.Graphics.Bitmap bitmap, int orientation) { Android.Graphics.Matrix matrix = new Android.Graphics.Matrix(); switch (orientation) { case (int)Android.Media.Orientation.Normal: return(bitmap); case (int)Android.Media.Orientation.FlipHorizontal: matrix.SetScale(-1, 1); break; case (int)Android.Media.Orientation.Rotate180: matrix.SetRotate(180); break; case (int)Android.Media.Orientation.FlipVertical: matrix.SetRotate(180); matrix.PostScale(-1, 1); break; case (int)Android.Media.Orientation.Transpose: matrix.SetRotate(90); matrix.PostScale(-1, 1); break; case (int)Android.Media.Orientation.Rotate90: matrix.SetRotate(90); break; case (int)Android.Media.Orientation.Transverse: matrix.SetRotate(-90); matrix.PostScale(-1, 1); break; case (int)Android.Media.Orientation.Rotate270: matrix.SetRotate(-90); break; default: return(bitmap); } try { Android.Graphics.Bitmap bmRotated = Android.Graphics.Bitmap.CreateBitmap(bitmap, 0, 0, bitmap.Width, bitmap.Height, matrix, true); bitmap.Recycle(); return(bmRotated); } catch (Java.Lang.OutOfMemoryError e) { e.PrintStackTrace(); return(null); } }