Создание и сохранение изображения из байта [] вызывает параметр не является допустимым исключением - PullRequest
7 голосов
/ 18 ноября 2010

Я реализовал следующую функциональность, которая подключается к веб-сервису и загружает значок с данного сайта и сохраняет его в байте [], который я храню в нашей базе данных.Теперь я хочу настроить его так, чтобы он сохранял значок на диск.Однако я получаю «Параметр не действителен», когда я пытаюсь создать изображение из байта [].

Мой код выглядит следующим образом ..

stream.Write(imageByteArray, 0, imageByteArray.Length);
Image i = Image.FromStream(stream); // EXCEPTION HAPPENS HERE.
i.Save(@"C:\tmp\" + filename + ".ico");

Исключение происходит насредняя линия.

Этот код отлично работает 9 раз из десяти, но для некоторых значков даже если иконка является допустимым изображением (или, по крайней мере, так оно и есть и отображается в браузере, когда на него указывают)это исключение.

У кого-нибудь есть идеи?Я тяну свои волосы здесь!

Спасибо

Дейв

Редактировать: значение в массиве, которое появляется, чтобы вызвать ошибку, равно 127.

Ответы [ 3 ]

20 голосов
/ 18 ноября 2010

Нет необходимости помещать его в изображение, просто выплюните байты прямо:

var fs = new BinaryWriter(new FileStream(@"C:\\tmp\\" + filename + ".ico", FileMode.Append, FileAccess.Write));
fs.Write(imageByteArray);
fs.Close();
1 голос
/ 18 октября 2017

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

for (int i=0;i<imageByteArray.Length;i++)
{
    imageByteArray[i]=(byte) imageByteArray[i];
}

У меня была эта проблема, и я решил ее путемэто решение.Удачи!

0 голосов
/ 18 ноября 2010

Добавить формат изображения:

stream.Position = 0;
i.Save(@"C:\tmp\" + filename + ".ico", System.Drawing.Imaging.ImageFormat.Icon);
...