【问题标题】:Store Image in .resx as byte[] rather than Bitmap将 .resx 中的图像存储为 byte[] 而不是 Bitmap
【发布时间】:2012-03-28 05:14:18
【问题描述】:

有点傻,但是……

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

我只想:

byte[] myImage = My.Resources.MyImage;

【问题讨论】:

  • 这样做会损害您的应用程序的性能吗? ImageConverter converter = new ImageConverter(); return (byte[])converter.ConvertTo(img, typeof(byte[]));

标签: c# resx


【解决方案1】:

或者,右键单击您的 .resx 文件并单击“查看代码”。

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

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

保存,您应该可以使用Byte[] 而不是Bitmap

【讨论】:

  • 注意:不要与 Resource.Designer.cs 文件混淆,任何类型的更改都会导致运行时错误。在 Resource.resx 文件中更改您的类型。
  • 我必须使用完整类型 System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 否则我会收到 MissingMethodException
  • 您可能还应该重新生成 Resource.Designer.cs 文件,例如通过将访问修饰符从 public 更改为 internal 并返回。
【解决方案2】:

尝试改用“嵌入式资源”

假设您在 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");

【讨论】:

  • 是的,我认为这是我真正想要的,我所追求的是一种将各种文件保存在程序集中的方法,以便我可以从代码创建它们,而不是将它们复制到输出构建时间。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2015-01-05
    • 1970-01-01
    • 2012-06-09
    • 2010-11-16
    • 2013-06-01
    • 1970-01-01
    • 2019-09-29
    • 1970-01-01
    • 2011-12-25
    相关资源
    最近更新 更多