BitmapImage返回PixelWidth和PixelHeight的值为0。

8

我想做一件非常简单的事情:获取图像的大小。

所以我创建了我的BitmapImage,但是当我尝试访问PixelWidthPixelHeight时,我得到了0。

请问我该怎么做呢?

编辑:(添加示例代码)

我只是这样做:

var baseUri = new Uri("ms-appx:///");
var bitmapImage = new BitmapImage(new Uri(baseUri, "Assets/Logo.png"));

MyImage.Source = bitmapImage;

Debug.WriteLine("Width: " + bitmapImage.PixelWidth + " Height: " + bitmapImage.PixelHeight);

在控制台中,我得到:
Width: 0 Height: 0

很有可能,图像未正确加载。在调试器中设置一个断点,并检查image的内容。或者尝试在窗口上显示image的内容。你能看到任何东西吗?那里是否有图像? - Cody Gray
@CodyGray。是的,图像完美显示。 - Antoine Gamond
2个回答

5
当您在设置 BitmapImage 的源后想要使用图像属性时,通常需要编写一个事件处理程序,在 ImageOpened 上执行。

请记住,只有当图像被下载和解码(即使用 Image.Source)时,ImageOpened 才会触发。

var bitmapImage = new BitmapImage(uri);
bitmapImage.ImageOpened += (sender, e) => 
{
    Debug.WriteLine("Width: {0}, Height: {1}",
        bitmapImage.PixelWidth, bitmapImage.PixelHeight);
};
image.Source = bitmapImage;

4
有没有一种方法可以强制下载图像(而不设置image.source)? - Cam

-2

你可以尝试以不同的方式进行初始化。试试这个:

BitmapImage myBitmapImage = new BitmapImage();

// BitmapImage.UriSource must be in a BeginInit/EndInit block
myBitmapImage.BeginInit();
myBitmapImage.UriSource = new Uri(@"C:\pics\Water_Lilies.jpg");
myBitmapImage.EndInit();
int w = myBitmapImage.PixelWidth;

2
我正在制作一个Windows 8商店应用程序,并且无法使用BeginInit()和EndInit()。 有任何想法为什么吗? - Antoine Gamond
1
你说的“不能使用”是什么意思?你遇到了什么错误? - Scott Baker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接