[英]Store Image in .resx as byte[] rather than Bitmap
有点傻,但是...
有没有办法阻止 Visual Studio 将.resx
的.jpg
文件视为位图,以便我可以访问资源的byte[]
属性?
我只是想:
byte[] myImage = My.Resources.MyImage;
或者,右键单击您的.resx
文件,然后单击“查看代码”。
编辑 XML 资源项以使用System.Byte[]
如下所示:
<data name="nomap" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\nomap.png;System.Byte[]</value>
</data>
保存,您应该可以使用Byte[]
而不是Bitmap
尝试使用“嵌入式资源”代替
因此,假设您在 ClassLibrary1 中有一个 jpg“Foo.jpg”。 将“构建操作”设置为“嵌入式资源”。
然后使用此代码获取字节
byte[] GetBytes()
{
var assembly = GetType().Assembly;
using (var stream = assembly.GetManifestResourceStream("ClassLibrary1.Foo.jpg"))
{
var buffer = new byte[stream.Length];
stream.Read(buffer, 0, (int) stream.Length);
return buffer;
}
}
或者,如果您想要一种更可重用的方法
byte[] GetBytes(string resourceName)
{
var assembly = GetType().Assembly;
var fullResourceName = string.Concat(assembly.GetName().Name, ".", resourceName);
using (var stream = assembly.GetManifestResourceStream(fullResourceName))
{
var buffer = new byte[stream.Length];
stream.Read(buffer, 0, (int) stream.Length);
return buffer;
}
}
并打电话
var bytes = GetBytes("Foo.jpg");
为 jpeg 文件指定不同的扩展名,例如“myfile.jpeg.bin”。 Visual Studio 应将其视为二进制文件,生成的设计器代码将返回 byte[]。
我不知道,虽然您可以重新定义.designer.cs中生成的代码,但不返回位图,而是返回包含Bitmap的字节数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.