将.resx中的图像存储为byte []而不是Bitmap

时间:2012-03-28 05:14:18

标签: c# resx

有点愚蠢但是......

有没有办法阻止Visual Studio将.resx中的.jpg文件视为Bitmap,以便我可以访问资源的byte []属性呢?

我只想:

byte[] myImage = My.Resources.MyImage;

4 个答案:

答案 0 :(得分:5)

尝试使用“嵌入资源”代替

所以假设你在ClassLibrary1中有一个jpg“Foo.jpg”。将“Bu​​ild Action”设置为“Embedded Resource”。

然后使用此代码获取字节

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");

答案 1 :(得分:5)

为jpeg文件指定一个不同的扩展名,例如“myfile.jpeg.bin”。 Visual Studio应该将其视为二进制文件,生成的设计器代码将返回byte []。

答案 2 :(得分:5)

或者,右键点击.resx文件,然后点击"查看代码"。

编辑XML资源项以使用System.Byte[],如下所示:

<data name="nomap" type="System.Resources.ResXFileRef, System.Windows.Forms">
   <value>..\Resources\nomap.png;System.Byte[]</value>
</data>

保存,您应该可以使用Byte[]代替Bitmap

答案 3 :(得分:0)

我不知道,尽管您可以在.designer.cs中重新定义生成的代码,但不返回位图,而是返回包含Bitmap的字节数组。