Обнаружение, когда используется изображение ошибки в PictureBox - PullRequest
6 голосов
/ 30 марта 2010

Я нашел это в Google, нажмите здесь , на который кто-то задал похожий вопрос, получив ответ, который он должен проверить, существует ли его файл. Тем не менее, я загружаю изображения из веб-ссылок , в которых отображается изображение ошибки, если A) Изображение не найдено или B) Если, как и в таких службах размещения изображений, как Photobucket, отображается «Превышена пропускная способность 'изображение. Есть ли способ определить, отображается ли изображение ошибки или оно недействительно?

Ответы [ 2 ]

10 голосов
/ 30 марта 2010

Да, событие LoadCompleted сообщает вам, что пошло не так:

private void pictureBox1_LoadCompleted(object sender, AsyncCompletedEventArgs e) {
  if (e.Error != null) {
    // You got the Error image, e.Error tells you why
  }
}

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

private void pictureBox1_Paint(object sender, PaintEventArgs e) {
  if (pictureBox1.Image == pictureBox1.ErrorImage) {
    // You got the Error image
  }
}

Этот обработчик событий также перехватывает ошибки загрузки, поэтому вы можете использовать его.

1 голос
/ 30 марта 2010

Не существует стандартного способа проверки действительных изображений, как вы бы хотели. Изображение «Превышена пропускная способность» - это совершенно правильное изображение в глазах компьютера.

Тем не менее, вы можете попробовать некоторые приемы для фильтрации хотя бы нескольких «неправильных» изображений:

  • Если вы загружаете изображения, установите веб-соединение, которое не выполняет автоматическое перенаправление. Вы можете установить некоторую семантику, которая классифицирует изображение как «недействительное», если вы перенаправлены в другое место, где, возможно, находится изображение «Превышена пропускная способность». Недостатком этого метода является, конечно, то, что вы, возможно, отфильтровываете изображения, которые находятся за редиректом и являются действительными.
  • Просто проверьте название картинки, поставляемой веб-сервером. Если вы подключаетесь к адресу, например «http://test.tld/image.jpg"», но получаете «bandwidth_exceeded.jpg» или что-то подобное, случай должен быть понятен. Этот метод требует, чтобы вы знали, как хостер изображений называет их «Bandwidth Превышена» или «no более доступные 'изображения.
  • Какая-то проверка распознавания изображений по известным "плохим" изображениям. Довольно сложный.

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

...