Хранить изображение в формате .resx как байт [], а не как растровое изображение - PullRequest
4 голосов
/ 28 марта 2012

Слегка ненормальный, но ...

Есть ли способ предотвратить обработку Visual Studio файла .jpg в .resx как растрового изображения, чтобы вместо этого я мог получить доступ к свойству byte [] для ресурса?

Я просто хочу:

byte[] myImage = My.Resources.MyImage;

Ответы [ 4 ]

6 голосов
/ 19 февраля 2015

Или щелкните правой кнопкой мыши файл .resx и выберите «Просмотреть код».

Отредактируйте элемент ресурса XML для использования System.Byte[] следующим образом:

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

Сохраните, и вы сможете использовать Byte[] вместо Bitmap

5 голосов
/ 28 марта 2012

Попробуйте вместо этого использовать "Embedded Resource"

Итак, допустим, у вас есть jpg "Foo.jpg" в ClassLibrary1.Установите для параметра «Build Action» значение «Embedded Resource».

Затем используйте этот код, чтобы получить байты

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");
5 голосов
/ 28 марта 2012

Дайте файлу jpeg другое расширение, например, "myfile.jpeg.bin". Visual Studio должна обрабатывать его как двоичный файл, и сгенерированный код конструктора вернет byte [].

0 голосов
/ 28 марта 2012

Нет, я не знаю, хотя вы можете переопределить сгенерированный код в .designer.cs, чтобы вернуть не растровое изображение, а байтовый массив из содержащегося растрового изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...