使用 pack uri 在 winforms 中加载图像

mig*_*ing 2 .net c# wpf uri

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

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

如何使用 URI 包加载此图像,或者如何将此 uri 转换为可以从 winform 中使用的内容。

示例 uri。

pack://application:,,,/myPack;component/Images/image.png
Run Code Online (Sandbox Code Playgroud)

Ed *_*tes 5

您要做的是读取图像数据以供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);
Run Code Online (Sandbox Code Playgroud)

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

string s = System.IO.Packaging.PackUriHelper.UriSchemePack; 
Run Code Online (Sandbox Code Playgroud)

  • 只是我的两分钱:这两个类都已移至PresentationFramework 库,因此您必须引用它,并且如果它是资源,则应使用Application.GetResourceStream(uri),否则它将返回null。 (3认同)