获取更好的图像信息?

问题描述 投票:1回答:1

除了下面的代码,我需要另一种方式来加载图像的大小和方向(如果已设置)。我正在使用WPF。

此代码有两个问题:

  1. 它会加载整个图像,因此需要花费时间和内存(尤其是大图像)

  2. 如果图像太大,它将以一个未知异常崩溃,假设它是内存不足的一个。

            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;
                }
            }
    
c# wpf image metadata
1个回答
0
投票

您可以阅读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;
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.