检测PictureBox中的错误图像何时使用

时间:2010-03-30 00:09:23

标签: c# image picturebox

我在谷歌click here上发现了这个问题,有人问了一个类似的问题,收到的回复是他们应该检查他们的文件是否存在。但是,我正在加载来自网络链接的图像,如果A)找不到图片或B)如果像Photobucket这样的图像托管服务显示'带宽',则显示错误图像超出了'形象。有没有办法检测是否显示错误图像或图像是否无效?

2 个答案:

答案 0 :(得分:10)

是的,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 :(得分:1)

没有像您希望的那样检查有效图片的标准方法。 “带宽超出”图像是计算机眼中完全有效的图像。

然而,您可以尝试一些技巧来过滤掉至少一些“错误”的图像:

  • 如果要加载图像,请设置不进行自动重定向的Web连接。您可以设置某种语义,如果您被重定向到其他可能超出“带宽”图像的地方,则将图像分类为“无效”。这种方法的缺点当然是你可能会过滤出重定向背后的图像并且这些图像是有效的。
  • 只需检查Web服务器提供的图片的名称。如果您连接到“http://test.tld/image.jpg”之类的地址,但检索“bandwidth_exceeded.jpg”或类似内容,则情况应该清楚。此方法要求您知道图像托管商如何命名其“超出带宽”或“不再可用”图像。
  • 对已知的“坏”图像进行某种图像识别检查。一个相当复杂的。

你知道,那些语义黑名单除了完美之外还有其他所有东西,甚至可能更糟糕的过滤出好的图像。