Преобразование байтового массива в изображение в C# - PullRequest
0 голосов
/ 20 февраля 2020

Я преобразовал изображение (.tif image) в байтовый массив и сохранил в БД. Сейчас я извлекаю этот байтовый массив из БД и хочу снова преобразовать его в изображение, но этот байтовый массив, который я преобразовываю обратно в изображение, не производит то же самое. В качестве теста (как показано ниже) я использую только изображение, а не чтение из БД для целей тестирования.

Первоначальное преобразование из массива байтов в Image:

//This is the function I am using:
public static byte[] ImageToByteArray(Image image)
        {
            using (var ms = new MemoryStream())
            {
                image.Save(ms, System.Drawing.Imaging.ImageFormat.Tiff);
                return ms.ToArray();
            }
        }

//Converting to byte array:
var tifImage = Image.FromFile(file.ToString());
var imageContent = ImageToByteArray(tifImage);

Сейчас чтобы попытаться преобразовать обратно в изображение, я делаю следующее:

var ms = new MemoryStream(imageContent);
var test1 = Image.FromStream(ms);

Но, похоже, результаты не совпадают. У меня есть функция «Разделение», которая разбивает страницы в пределах tiff, и одна возвращает 8 страниц (растровые изображения), а другая только 1.

Я не очень разбираюсь в вышесказанном, поэтому мне нужна небольшая помощь в Заполняя пробелы в знаниях, пожалуйста:)

Спасибо за любую помощь!

1 Ответ

1 голос
/ 21 февраля 2020

Я нашел решение, которое сработало. Похоже, что когда выполнялась начальная ImageToByteArray, она выполняла только «1-ую страницу», а не все 8. Поэтому я использовал следующий код для преобразования всего изображения tiff:

var tiffArray = File.ReadAllBytes(file); //The `file` is the actual `.tiff` file

I затем использовал следующее, чтобы преобразовать обратно в изображение (response - это byte[], возвращаемое из нашего API):

using (MemoryStream ms = new MemoryStream(response))
            {
                ms.Position = 0;
                Image returnImage = Image.FromStream(ms);

                var splitImages = ImageHelper.Split(returnImage);//This is to split the pages within the tiff
            }

Я прочитал, чтобы вышеприведенное сработало (и я проверил его ), все, что вы делаете с byte[], который вы преобразовываете обратно в изображение, должно быть выполнено в using, так как все, что после using означает, что image удаляется.

...