【发布时间】:2021-03-02 10:02:29
【问题描述】:
说明
通过读取基于方向旋转的EXIF元数据来检查图像是否旋转,然后创建新的位图并设置为ImageView控件。
[C#]
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
ImageView image = new ImageView(this);
var bitmap = BitmapFactory.DecodeResource(Resources, Resource.Drawable.test);
ExifInterface originalMetadata;
using (var stream = new MemoryStream())
{
bitmap.Compress(Bitmap.CompressFormat.Jpeg, 0, stream);
originalMetadata = new ExifInterface(stream);
}
int orientation = GetRotation(originalMetadata);
Matrix matrix = new Matrix();
if (orientation != 0)
{
matrix.PreRotate(orientation);
bitmap = Bitmap.CreateBitmap(bitmap, 0, 0, bitmap.Width, bitmap.Height, matrix, true);
}
image.SetImageBitmap(bitmap);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.activity_main);
}
预期行为
读取旋转图像 ExifData 以获取方向。根据方向旋转然后创建新的位图并设置为 ImageView 控件。
实际行为
将 ExifData 方向值设为 0。
基本信息
测试设备为华为PRA、Infinix Pro
环境
Visual Studio 2019
截图
示例链接
有没有办法解决这个问题?
【问题讨论】:
-
你验证过图片是否真的包含EXIF数据吗?
-
是的,实际图像包含 Exif 数据。
标签: c# android xamarin xamarin.forms xamarin.android