【问题标题】:load image in winforms using pack uri使用pack uri在winforms中加载图像
【发布时间】:2011-05-24 18:20:34
【问题描述】:

我在尝试在我的 winform 上显示一些图像时遇到问题。 在一个表单上,我有一个 wpf 容器,它有一个 WPF 控件,可以毫无问题地从外部 exe 加载图像(将图像作为资源),它引用包含表单的 dll,使用 wpf 容器,即显示他们。

现在,我想添加另一个 winform,我需要在那里显示使用 wpf 容器显示的相同图像,但我无法向此表单添加 wpf 容器,因为我需要在组合框。

如何使用 URI 包加载这些图像,或者如何将这个 uri 转换为可以从我的 winform 使用的东西。

示例 uri。

pack://application:,,,/myPack;component/Images/image.png

【问题讨论】:

    标签: c# .net wpf uri


    【解决方案1】:

    您要做的是读取图像数据以在Winforms中使用,因此您需要直接访问嵌入的资源图像文件,可以这样做:

    Uri uri = new Uri("pack://application:,,,/myPack;component/Images/image.png", UriKind.RelativeOrAbsolute);
    StreamResourceInfo info = Application.GetContentStream(uri);
    System.Drawing.Image myImage = System.Drawing.Image.FromStream(info.Stream);
    

    编辑:如果您收到有关无效端口的异常,请确保您已注册打包方案,您只需引用它即可完成。所以把这行代码放在上面:

    string s = System.IO.Packaging.PackUriHelper.UriSchemePack; 
    

    【讨论】:

    • 我已经尝试过了,它给了我:无效的 URI:指定的端口无效。
    • 我必须导入哪个库才能使用 StreamResourceInfo 和 Application.GetContentStream ??
    • StreamResourceInfo:System.Windows.Resources。应用程序:System.Windows。请问您能接受答案吗?
    • 顺便说一句,只要你添加了引用,你就可以使用Ctrl+。 (控制加句点)自动将 using 语句添加到您的代码中。
    • 只是我的两分钱:两个类都已移至 PresentationFramework 库,因此您必须引用它,如果它是资源则应使用 Application.GetResourceStream(uri),否则它将返回空。
    【解决方案2】:

    注意!!

    你应该使用这个:

    Application.Get资源Stream(uri);

    而不是这个:

    Application.Get内容Stream(uri);

    因为内容不适用于图像文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多