【问题标题】:Creating Images from an Embedded Resource从嵌入式资源创建图像
【发布时间】:2011-09-09 07:38:45
【问题描述】:

在过去的 2 天里,这一直让我发疯,我发现任何接近的东西似乎都不适用于我的情况,也许有人可以指出我做错了什么。

我有一个 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 解决...除了资源链接之外的任何帮助都会很好,因为此时我已经阅读了它们。

【问题讨论】:

    标签: c# wpf embedded-resource


    【解决方案1】:

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

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

    【讨论】:

    • 我可以发誓我试过这个,再试一次,这次成功了,谢谢!
    【解决方案2】:

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

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

    【讨论】:

    • 在重新阅读有关 Pack URI 的权限后,我继续并更改了它,但由于某种原因,我收到了一个没有具体细节的解析错误,所以我可能还有其他问题。不过我最终还是得到了它!
    • 它对我不起作用。即使代码在同一个程序集中,以某种方式包含程序集名称也有效:“pack://application:,,,/MyAssemblyName;component/Resources/images/photo.png”
    猜你喜欢
    • 2011-08-13
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-28
    相关资源
    最近更新 更多