从嵌入式资源创建映像

时间:2011-09-08 10:04:01

标签: c# wpf embedded-resource

在过去的两天里,这让我发疯了,在我的情况下,我发现的任何近似似乎都不起作用,也许有人可以指出我做错了什么。

我有一个WPF项目,我已经包含了相当多的图像(80ish)。我已将它们添加到项目中,并将其添加到名为“Images”的文件夹中。它们目前被设置为嵌入式资源(虽然我也尝试过常规资源)但似乎没有任何效果。

我正在尝试使用这些文件作为源来创建和加载Image类型的ArrayList,但是我的失败非常糟糕。

private void addPicture(string name)
{            
    string filePath = "pack://MyApp_WPF:,,,/Images/" + name + ".png";
    Stream imageStream = assembly.GetManifestResourceStream(filePath);

    Image curImage = new Image();
    BitmapImage bmpImage = new BitmapImage();
    bmpImage.BeginInit();
    bmpImage.UriSource = new Uri(filePath, UriKind.Relative);
    bmpImage.EndInit();
    curImage.Height = 60;
    curImage.Stretch = Stretch.Uniform;
    curImage.Source = bmpImage;
    curImage.Margin = new Thickness(5);

    imageList.Add(curImage);
}

在我的Windows窗体应用程序中做起来要容易得多,但是我无法用WPF来解决它...除了链接到资源之外的任何帮助都会很好,因为在这一点上我已经阅读了它们。

2 个答案:

答案 0 :(得分:5)

首先要注意的是,您应该订阅一个DownloadError事件,这可能会解释发生了什么以及为什么(尽管有时错误消息是相当通用的);接下来是您可能不需要pack:// URI构造,其中图像构建操作为Resource

var bmpImage = new BitmapImage(new Uri(
    string.Format("/Images/{0}.png", name", UriKind.Relative));

答案 1 :(得分:3)

Pack URI是错误的,在那里你命名你的程序集你应该放置权限,在这种情况下application,即

string filePath = "pack://application:,,,/Images/" + name + ".png";