【问题标题】:BitmapImage returns 0 for PixelWidth and PixelHeightBitmapImage 为 PixelWidth 和 PixelHeight 返回 0
【发布时间】:2013-03-14 10:09:53
【问题描述】:

我正在尝试做一件超级简单的事情:获取图像的大小。

所以我创建了我的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 的内容。你能看到什么吗?那里有图片吗?
  • @CodyGray。是的,图像完美显示。

标签: c# .net windows-runtime winrt-xaml bitmapimage


【解决方案1】:

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

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

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

【讨论】:

  • 有没有办法强制下载图片(不设置image.source)?
【解决方案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;

【讨论】:

  • 我正在制作 Windows 8 商店应用程序,但 BeginInit() 和 EndInit() 无法使用。任何想法为什么?
  • “不能使用”是什么意思?你遇到了什么错误?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-21
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多