稍微愚蠢的,但...商店形象的.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