6

我在谷歌上找到了这个,点击这里,有人问了一个类似的问题,收到回复说他们应该检查他们的文件是否存在。但是,我正在从网络链接加载图像,如果 A)找不到图片或 B)如果像在 Photobucket 等图像托管服务中显示“超出带宽”图像,则会在其中显示错误图像。有没有办法检测是否显示错误图像或图像是否无效?

4

2 回答 2

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
  }
}

此事件处理程序也捕获加载错误,因此可能是您要使用的事件处理程序。

于 2010-03-30T00:36:49.700 回答
1

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

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

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

你看,那些语义黑名单并不是完美的,甚至可能会过滤掉好的图像。

于 2010-03-30T00:32:52.520 回答