如何在c#中将资源作为字节数组?

时间:2013-04-01 12:59:30

标签: c# embedded-resource

我从项目设置中将图像添加到我的c#项目 - >资源
如何在运行时获取此图像?
我试着这个:

public byte[] GetResource(string ResourceName)
{
    System.Reflection.Assembly asm = Assembly.GetEntryAssembly();

    // list all resources in assembly - for test
    string[] names = asm.GetManifestResourceNames(); //even here my TestImg.png is not presented

    System.IO.Stream stream = asm.GetManifestResourceStream(ResourceName); //this return null of course

    byte[] data = new byte[stream.Length];

    stream.Read(data, 0, (int)stream.Length);

    return data;
}

我用这种方式调用这个函数:

byte[] data = GetResource("TestImg.png");

但是我在项目浏览器的Resources文件夹中看到了我的图像 enter image description here

有人能说出那里有什么问题吗? enter image description here

4 个答案:

答案 0 :(得分:7)

您需要将文件TestImg.png设置为“嵌入式资源”。然后,资源名称为Resources/TestImg.png

答案 1 :(得分:2)

您可以使用Properties.Resources.TestImg访问该图片。

答案 2 :(得分:2)

这有效:

    var info = Application.GetResourceStream(uri);
    var memoryStream = new MemoryStream();
    info.Stream.CopyTo(memoryStream);
    return memoryStream.ToArray();

另外,如果您想将图像保存到驱动器中:

    var b =
    new Bitmap(namespace.Properties.Resources.image_resouce_name);
    b.Save("FILE LOCATION");

答案 3 :(得分:0)

您可以编辑Resources.resx文件并更改:

  <data name="ResourceKey" type="System.Resources.ResXFileRef, System.Windows.Forms">
    <value>..\Resources\Image.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
  </data>

到(在文件名后替换类型和程序集定义):

  <data name="ResourceKey" type="System.Resources.ResXFileRef, System.Windows.Forms">
    <value>..\Resources\Image.jpg;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </data>

现在,您可以使用Properties.Resources.ResourceKey作为字节数组访问图像。我不知道如果不手动编辑资源文件就可以做到这一点。