gpt4 book ai didi

c# - 如何从构建操作标记为资源的图像中获取 System.Drawing.Image 对象?

转载 作者:行者123 更新时间:2023-12-04 00:25:52 24 4
gpt4 key购买 nike

我有一个 wpf 应用程序,并且得到了一个对代码隐藏有用的图像,它在项目中的位置类似于“projectName\images\pp.png”,它的构建操作是“Resource”(节点: 不是嵌入式资源 )。
我在代码隐藏中需要一个 System.Drawing.Image 对象。
我尝试了这些方法:

1.

var img = new BitmapImage(new Uri(@"\images\pp.png", UriKind.Relative));
var stream = img.StreamSource;
System.Drawing.Image needObj = Image.FromStream(stream);

我有一个空流,所以它不起作用。

2.
private static System.IO.Stream getResource(string name)
{
var assembly = Assembly.GetExecutingAssembly();
string resName = assembly.GetName().Name + ".g.resources";
return assembly.GetManifestResourceStream(resName);
}
var stream = getResource(@"\images\pp.png");
System.Drawing.Image needObj = Image.FromStream(stream);

我得到了一个 UnmanagedMemoryStream 对象,并且在调用 "Image.FromStream(stream)"时发生了 InvalidArgument 异常。

谁能告诉我为什么上述两种方法不起作用或如何实现它?

最佳答案

WPF - 获取图像资源并转换为 System.Drawing.Image

var bitmapImage = new BitmapImage(new Uri(@"pack://application:,,,/"
+ Assembly.GetExecutingAssembly().GetName().Name
+ ";component/"
+ "images/pp.png", UriKind.Absolute));

var encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create((BitmapImage)bitmapImage));
var stream = new MemoryStream();
encoder.Save(stream);
stream.Flush();
var image = new System.Drawing.Bitmap(stream);

注:
  • 使用“/”代替“\”
  • 考虑阅读 Pack URIs in WPF (重要部分:资源文件包 URI)
  • 添加对 system.drawing.dll 的引用

  • Local Assembly Resource File

    The pack URI for a resource file that is compiled into the local assembly uses the following authority and path: pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.Ext

    关于c# - 如何从构建操作标记为资源的图像中获取 System.Drawing.Image 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32486679/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com