以编程方式将资源加载为字节数组
Posted
技术标签:
【中文标题】以编程方式将资源加载为字节数组【英文标题】:load resource as byte array programmatically 【发布时间】:2012-03-18 06:23:30 【问题描述】:我将图像添加为文件并将类型设置为资源(见截图) 如何在不使用 resx 文件等的情况下将其作为字节数组提取出来?
【问题讨论】:
我认为您在询问之前没有搜索过网络。 support.microsoft.com/kb/319292 是的,但没有显示如何获取byte[]
【参考方案1】:
如果您不直接使用图像(即:如果您的项目是 Windows 应用程序,则使用控件),那么您可以:
1-更改文件扩展名(即:*.jpg.data)
2- 将“图像”添加到资源文件 RESX
3- 使用以下方法访问字节数组:Resources.PathToImages.ResxFileName.ImageName
注意:如果添加扩展名不变的图像,RESX 编译器会创建 Bitmap 属性而不是 byte[] 属性。
【讨论】:
【参考方案2】:事情甚至比项目标记为答案更简单!
如果点击资源中的文件并查看属性窗口,可以将文件类型设置为二进制。 然后你就可以通过简单的代码访问字节数组了
var byteArray = Properties.Resources.FileName;
其中 FileName 是您的资源的名称。
【讨论】:
使用 Visual Studio Express 2010 我无法更改 PNG 资源的类型,但我在添加为资源之前将文件重命名为 .bin,效果非常好! 我在 Visual Studio 2017 中看不到任何更改文件类型的选项 您确定要查看“属性”窗口吗?我刚刚检查了我安装的 VS2017,它肯定在那里。 VS 2015:被识别为图像格式的文件显示在资源的 Images 视图中。然而,属性中的文件类型选项似乎只显示在 文件 视图中的资源。 似乎有些混乱,因为我们正在讨论嵌入资源的两种不同方法。 OP 正在讨论将文件的构建操作设置为嵌入式资源。您正在谈论使用 resx 文件。我认为 OP 不知道该选项。【参考方案3】:How to embed and access resources by using Visual C# 中描述了该过程。
本质上它需要使用反射,使用 Assembly
类。
Stream imageStream =
currentAssembly.GetManifestResourceStream("Resources.logo_foot.png");
有关如何从Stream
获取byte[]
的详细信息,请参阅How to convert an Stream into a byte[] in C#?。
【讨论】:
我必须输入整个命名空间才能让它工作。如果您不确定自己拥有哪些资源,请致电 currentAssembly.GetManifestResourceNames() 从流中获取字节数组似乎是不必要的棘手。我认为使用 Resources.resx 嵌入资源要好得多,然后它将提供使用byte[]
而不是 Stream
的访问权限。以上是关于以编程方式将资源加载为字节数组的主要内容,如果未能解决你的问题,请参考以下文章