Получение Объекта изображения от массива байтов

У меня есть массив байтов для изображения (сохраненный в базе данных). Я хочу создать Объект изображения, создать несколько Изображений различных размеров и сохранить их назад в базе данных (сохраните ее назад к массиву байтов).

Я не волнуюсь по поводу части базы данных или изменения размеров. Но есть ли простой способ загрузить Объект изображения, не сохранив файл к файловой системе и затем отложить его в массиве байтов, когда я сделан, изменив размер его? Я хотел бы сделать все это в памяти, если я могу.

Something like:
Image myImage = new Image(byte[]);
or
myImage.Load(byte[]);
15
задан Dan Williams 20 July 2010 в 13:30
поделиться

3 ответа

Для этого нужно использовать MemoryStream:

byte[] bytes;
...
using (var ms = new System.IO.MemoryStream(bytes)) {
   using(var img = Image.FromStream(ms)) {
      ...
   }
}
26
ответ дан 1 December 2019 в 02:09
поделиться

Основываясь на ваших комментариях к другому ответу, вы можете попробовать это для выполнения преобразования изображения, которое хранится в byte[], а затем вернуть результат в виде другого byte[].

public byte[] TransformImage(byte[] imageData)
{
    using(var input = new MemoryStream(imageData))
    {
        using(Image img = Image.FromStream(input))
        {
            // perform your transformations

            using(var output = new MemoryStream())
            {
                img.Save(output, ImageFormat.Bmp);

                return output.ToArray();
            }
        }
    }
}

Это позволит вам передать байт[], хранящийся в базе данных, выполнить любые необходимые преобразования, а затем вернуть новый байт[], который может быть сохранен в базе данных.

2
ответ дан 1 December 2019 в 02:09
поделиться

Я подумал, что добавлю это как ответ, чтобы сделать его более заметным.

С сохранением его обратно в массив байтов:

    public Image localImage;
    public byte[] ImageBytes;

    public FUU_Image(byte[] bytes)
    {
        using (MemoryStream ImageStream = new System.IO.MemoryStream(bytes))
        {
            localImage = Image.FromStream(ImageStream);
        }

        localImage = ResizeImage(localImage);

        using (MemoryStream ImageStreamOut = new MemoryStream())
        {
            localImage.Save(ImageStreamOut, ImageFormat.Jpeg);
            ImageBytes = ImageStreamOut.ToArray();
        }

    }
0
ответ дан 1 December 2019 в 02:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: