从嵌入式资源创建图像

5
这让我疯狂了过去的两天,任何看起来接近的方法都似乎不能在我的情况下解决问题,也许有人能指出我做错了什么。
我有一个WPF项目,其中包含相当多的图像(大约80张)。 我已经将它们添加到名为“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个回答

6

首先需要注意的是,有一个DownloadError事件你应该订阅,它可能会解释正在发生的事情以及原因(尽管有时错误消息可能比较通用);其次,如果使用Resource构建操作,则可能不需要pack:// URI结构来处理图像:

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

我本来以为我已经尝试过这个了,但再试一次就成功了,谢谢! - Karoly S

3

Pack URI是错误的,在给程序集命名时,您应该放置一个授权机构,例如application

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

在重新阅读有关Pack URI权限的内容后,我继续进行了更改,但出现了无具体信息的解析错误,所以可能还有其他问题。不过最终我还是解决了它! - Karoly S
对我来说它不起作用。不知何故,包括程序集名称在内,即使代码位于同一程序集中也可以工作: "pack://application:,,,/MyAssemblyName;component/Resources/images/photo.png" - Setyo N

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