获取BitmapImage PixelHeight属性会导致初始化问题
本文关键字:初始化 问题 BitmapImage PixelHeight 属性 获取 | 更新日期: 2023-09-27 17:59:39
我有一个BitmapImage,我想获取PixelHeight和PixelWidth属性,这样我就可以确定它是横向布局还是纵向布局。在我确定其布局后,我需要设置图像的高度或宽度,使其适合我的图像查看器窗口,而不会扭曲高宽比。然而,似乎我必须调用BeginInit()才能对我的图像执行任何操作。我必须调用EndInit()才能获得PixelHeight或PixelWidth属性,并且我不能在同一个BitmapImage对象上多次调用BeginInit(。那么,我如何设置我的图像,获得高度和宽度,确定其方向,然后调整图像大小呢?
下面是我一直在使用的代码块:
image.BeginInit();
Uri imagePath = new Uri(path + "''" + die.Die.ImageID + "_" + blueTape + "_BF.BMP");
image.UriSource = imagePath;
//image.EndInit();
imageHeight = image.PixelHeight;
imageWidth = image.PixelWidth;
//image.BeginInit();
// If the image is taller than it is wide, limit the height of the image
// i.e. DML87s and all non-rotated AOI devices
if (imageHeight > imageWidth)
{
image.DecodePixelHeight = 357;
}
else
{
image.DecodePixelWidth = 475;
}
image.EndInit();
当我运行这个时,我会得到这个运行时异常:
InvalidOperationException:
BitmapImage初始化未完成。调用EndInit方法完成初始化。
有人知道如何处理这个问题吗?
据我所知,如果不对位图进行两次解码,您想做的事情是不可能的。
我想只需将位图解码为其原始大小,然后根据需要设置包含Image控件的大小会简单得多。位图被适当缩放,因为Stretch
被设置为Uniform
(由于图像控件的宽度和高度都被设置,所以Stretch
也可以被设置为Fill
或UniformToFill
)。
var bitmap = new BitmapImage(new Uri(...));
if (bitmap.Width > bitmap.Height)
{
image.Width = 475;
image.Height = image.Width * bitmap.Height / bitmap.Width;
}
else
{
image.Height = 475;
image.Width = image.Height * bitmap.Width / bitmap.Height;
}
image.Stretch = Stretch.Uniform;
image.Source = bitmap;