у меня есть следующий код:Как сказать, если Image.FromStream завершена
var request = (HttpWebRequest)HttpWebRequest.Create(url);
var response = request.GetResponse();
var stream = response.GetResponseStream();
if (stream != null) {
Image newImage = Image.FromStream(stream, true);
pic.Thumb = newImage.ImageToByteArray();
}
Что происходит, если раз зачитать? Или соединение прерывается в середине загрузки?
Документы говорят, что он будет вызывать ArgumentException
, если он не является допустимым форматом или является нулевым, но я понятия не имею, будет ли это исключение, если изображение загружено только частично.
К сожалению, я не могу полагаться на заголовок ContentLength, чтобы сообщить мне правильный размер файла, поскольку сервер лежит и дает большую длину содержимого, чем на самом деле. Поэтому я надеюсь, что Image.FromStream сможет узнать, завершено ли изображение или нет.
Может ли кто-нибудь дать вам некоторое представление?
Примечание: ImageToByteArray просто метод расширения, который использует поток памяти для преобразования Image
в byte[]
UPDATE:
По Даринам, затем ExternalException выкинут при попытке сохранить изображение , Тем не менее, мое собственное тестирование, в котором я обрезал файл изображения, показывает, что FromStream
действительно бросает исключение ArgumentException, если изображение не соответствует количеству байтов.
Право, это имеет смысл. Что произойдет, если сервер просто не отправит полное изображение? (Предположим, у них проблемы с загрузкой и получение тайм-аутов в их бэкэнд, и просто отправить частичное изображение, но в противном случае соединение нормально) –
@Mystere Man, я не понимаю. Вы имеете в виду сервер, отправляющий массив байтов, который является недопустимым изображением, например удаленный ресурс, на котором размещается поврежденное изображение? Если да, тогда вы получите «ArgumentException» при попытке загрузить этот поток в объект Image GDI + (метод «Image.FromStream»). –
Я имею в виду, что я не уверен, что класс изображения обнаружит неполное изображение как недействительное или нет и вызовет исключение ArgumentException. –