簡體   English   中英

將圖像存儲在 .resx 中作為字節 [] 而不是位圖

[英]Store Image in .resx as byte[] rather than Bitmap

有點傻,但是...

有沒有辦法阻止 Visual Studio 將.resx.jpg文件視為位圖,以便我可以訪問資源的byte[]屬性?

我只是想:

byte[] myImage = My.Resources.MyImage;

或者,右鍵單擊您的.resx文件,然后單擊“查看代碼”。

編輯 XML 資源項以使用System.Byte[]如下所示:

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

保存,您應該可以使用Byte[]而不是Bitmap

嘗試使用“嵌入式資源”代替

因此,假設您在 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");

為 jpeg 文件指定不同的擴展名,例如“myfile.jpeg.bin”。 Visual Studio 應將其視為二進制文件,生成的設計器代碼將返回 byte[]。

我不知道,雖然您可以重新定義.designer.cs中生成的代碼,但不返回位圖,而是返回包含Bitmap的字節數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM