除了下面的代码,我需要另一种方式来加载图像的大小和方向(如果已设置)。我正在使用WPF。
此代码有两个问题:
它会加载整个图像,因此需要花费时间和内存(尤其是大图像)
如果图像太大,它将以一个未知异常崩溃,假设它是内存不足的一个。
using (FileStream imageStream = File.OpenRead(path))
{
using (System.Drawing.Image img = System.Drawing.Image.FromStream(imageStream))
{
Rotation imgRotation = GetImageOreintation(img);//get rotation
itemData.ImageWidth = img.Width;
itemData.ImageHeight = img.Height;
itemData.ImageOrientation = imgRotation;
if (imgRotation != Rotation.Rotate0)
imgTemp.Rotation = imgRotation;
}
}
您可以阅读BitmapFrame的元数据:
var bitmap = BitmapFrame.Create(
new Uri(path), BitmapCreateOptions.DelayCreation, BitmapCacheOption.OnDemand);
var width = bitmap.PixelWidth;
var heigth = bitmap.PixelHeight;
var metadata = bitmap.Metadata as BitmapMetadata;
var rotation = 0;
if (metadata != null)
{
var orientation = metadata.GetQuery("System.Photo.Orientation");
if (orientation != null)
{
switch ((ushort)orientation)
{
case 6:
rotation = 90;
break;
case 3:
rotation = 180;
break;
case 8:
rotation = 270;
break;
}
}
}