在我的 Xamarin.Android应用中,我遇到了与该问题相同的问题: Why does an image captured using camera intent gets rotated on some devices on Android?
我能够检测到捕获的图像是否旋转,并且可以将图像旋转到正确的方向:
ExifInterface ei = new ExifInterface(Storage.Instance.ExternalTmpImagePath);
Android.Media.Orientation ori = (Android.Media.Orientation)ei.GetAttributeInt(ExifInterface.TagOrientation, (int)Android.Media.Orientation.Normal);
float angle = 0;
switch (ori)
{
case Android.Media.Orientation.Rotate180:
angle = 180;
break;
case Android.Media.Orientation.Rotate270:
angle = 270;
break;
case Android.Media.Orientation.Rotate90:
angle = 90;
break;
default:
break;
}
if (angle != 0)
{
BitmapFactory.Options rotateOptions = await GetBitmapOptionsOfImageAsync(Storage.Instance.ExternalTmpImagePath);
using (Bitmap bitmapToRotate = await LoadScaleDownBitmapForDisplayAsync(Storage.Instance.ExternalTmpImagePath, rotateOptions, 1024, 1024))
{
Matrix matrix = new Matrix();
matrix.PostRotate(angle);
using (Bitmap newBitmap = Bitmap.CreateBitmap(bitmapToRotate, 0, 0, bitmapToRotate.Width, bitmapToRotate.Height, matrix, true))
{
Toast.MakeText(Context, "Bild wird rotiert.", ToastLength.Long).Show();
Storage.Instance.Delete(Storage.Instance.ExternalTmpImagePath);
var stream = new FileStream(Storage.Instance.ExternalTmpImagePath, FileMode.Create);
newBitmap.Compress(Bitmap.CompressFormat.Png, 10, stream);
stream.Close();
}
}
}
正如您在我的代码中看到的那样,带标题的图像存储在Storage.Instance.ExternalTmpImagePath
中。
我发现旋转图像的所有解决方案都使用相同的步骤:
我的问题是,此过程最多需要5秒钟来旋转图像。确切地说,newBitmap.Compress(Bitmap.CompressFormat.Png, 100, stream);
需要很多时间。
所以我的问题是:
CompressFormat.Png
? 编辑: