稍微愚蠢的,但...商店形象的.resx为字节[],而不是位图
有没有一种方法,以防止Visual Studio的治疗中的.resx .jpg文件作为位图,以便我能而不是访问资源的byte []属性?
我只是想:
byte[] myImage = My.Resources.MyImage;
稍微愚蠢的,但...商店形象的.resx为字节[],而不是位图
有没有一种方法,以防止Visual Studio的治疗中的.resx .jpg文件作为位图,以便我能而不是访问资源的byte []属性?
我只是想:
byte[] myImage = My.Resources.MyImage;
尝试使用一种“嵌入的资源”,而不是
因此,可以说你有一个jpg“Foo.jpg”在ClassLibrary1的。将“构建操作”设置为“嵌入式资源”。如果你想要一个更可重复使用的方法
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");
是的,我认为这是我真正想要的,我所追求的是一种在程序集中保留各种文件的方式,以便我可以从代码创建它们,而不是在构建时将它们复制到输出。 – Grokodile 2012-03-28 05:53:51
没有办法,我知道的,虽然你可以重新定义了.Designer.cs生成的代码返回不包含从位图的位图,但字节数组。
呃,我对自动生成的东西不会太多。你可能最终会触发它重新生成,现在你有一个维修头痛。 – 2012-03-28 05:36:29
给这个
然后使用此代码来获取字节
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;
}
}
,或者, jpeg文件有不同的扩展名,例如“myfile.jpeg.bin”。然后Visual Studio应该将其视为二进制文件,生成的设计器代码将返回byte []。
或者,右键单击您的.resx
文件,然后单击“查看代码”。
编辑使用System.Byte[]
这样的XML资源项目:
<data name="nomap" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\nomap.png;System.Byte[]</value>
</data>
保存,你应该能够使用Byte[]
,而不是Bitmap
只有这个对我有用,谢谢 – 2017-01-31 08:48:47
注意:不要与** Resource.Designer.cs **文件混淆,任何类型的改变都会给你一个运行时错误。请在** Resource.resx **文件中更改您的类型。 – 2017-01-31 09:00:55
它是否会伤害你的应用程序要做到这一点的表现? 'ImageConverter converter = new ImageConverter();返回(byte [])converter.ConvertTo(img,typeof(byte []));' – 2012-03-28 05:37:43