Изображение. FromStream () метод возвращает исключение Недействительного аргумента

Почему код был циклом навсегда?

Типичный float может точно представлять около 2 32 чисел, 0.1 не является одним из них. Так что код больше похож.

float f = 1.0;
while (f != 0.0) {
  f = f - a_number_close_to_one_tenth;
  printf("%.1f\n", f);
}

Повторные вычитания "пропустить" 0,0.


Вместо этого используйте >=, и код будет повторять ожидаемое количество раз (или, может быть, еще раз). Используйте печать с более высокой точностью, чтобы понять почему.

float f = 1.0;
while (f >= 0.0) {
  f = f - a_number_close_to_one_tenth;
  printf("%.17e\n", f);
}
11
задан Xaruth 9 October 2013 в 10:22
поделиться

5 ответов

Я предполагаю, что что-то идет не так, как надо при получении файла из сервера. Возможно, Вы только получаете часть файла прежде, чем попытаться преобразовать его в Image? Вы уверены, что это - тот же самый массив байтов, Вы подаете приложение C++?

Попытайтесь сохранить поток в файл и посмотрите то, что Вы получаете. Вы смогли раскрывать некоторые подсказки там.

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


Править: Похоже, что нет ничего неправильно с получением данных. Проблема состоит в том, что это находится в формате .raw (не формат это Image.FromStream понимает). Bitmap(Int32, Int32, Int32, PixelFormat, IntPtr) конструктор может быть полезным здесь. Или, можно создать пустой битовый массив и с беконом, салатом и помидорами это вручную от необработанных данных.

3
ответ дан 3 December 2019 в 06:22
поделиться

System.InvalidArgument означает, что поток не имеет допустимого формата изображения, т.е. типа изображения, который не поддерживается.

1
ответ дан 3 December 2019 в 06:22
поделиться

У меня была та же проблема в прошлом, и это было вызвано утечкой в библиотеках окон GDI, которая является тем, что использует 'Битовый массив'. Если этот случай все время для Вас затем его, вероятно, не связанный, как бы то ни было.

0
ответ дан 3 December 2019 в 06:22
поделиться

У меня возникла эта проблема, когда я делал это:

MemoryStream stream = new MemoryStream();
screenshot.Save(stream, ImageFormat.Png);
byte[] bytes = new byte[stream.Length];
stream.Save(bytes, 0, steam.Length);

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

MemoryStream stream = new MemoryStream();
screenshot.Save(stream, ImageFormat.Png);
byte[] bytes = stream.ToArray();

А затем это сработало:

MemoryStream stream = new MemoryStream(bytes);
var newImage = System.Drawing.Image.FromStream(stream);
stream.Dispose();
3
ответ дан 3 December 2019 в 06:22
поделиться

Может быть, изображение встроен в поле OLE, и вы должны учитывать 88 байт заголовок OLE PLUS PLAY нагрузки:

byteBlobData = (Byte[]) reader.GetValue(0);
stream = new MemoryStream(byteBlobData, 88, byteBlobData.Length - 88);
img = Image.FromStream(stream);
4
ответ дан 3 December 2019 в 06:22
поделиться
Другие вопросы по тегам:

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