Znalazłem to w Google, click here, które ktoś zadał podobne pytanie, otrzymując odpowiedź, że powinien sprawdzić, czy ich plik istnieje. Jednak ładuję obrazy z łączy internetowych, w których wyświetla się obraz błędu, jeśli A) Obraz nie został znaleziony lub B) Jeśli, podobnie jak w usługach hostingu obrazów, takich jak Photobucket, wyświetlany jest obraz "Przekroczono przepustowość". Czy istnieje sposób na wykrycie, czy wyświetlany jest obraz błędu, czy obraz jest nieprawidłowy?Wykrywanie, kiedy używany jest obraz błędu w PictureBox
Odpowiedz
Tak, zdarzenie LoadCompleted mówi, co poszło nie tak:
private void pictureBox1_LoadCompleted(object sender, AsyncCompletedEventArgs e) {
if (e.Error != null) {
// You got the Error image, e.Error tells you why
}
}
Nie może być również przypadek, w którym obciążenie obraz wypełniony prawidłowo, ale coś było nie tak z plikiem obrazu samego:
private void pictureBox1_Paint(object sender, PaintEventArgs e) {
if (pictureBox1.Image == pictureBox1.ErrorImage) {
// You got the Error image
}
}
Ten moduł obsługi zdarzeń również wychwytuje błędy ładowania, więc może być tym, którego chcesz użyć.
Nie ma standardowego sposobu sprawdzania poprawnych zdjęć, takich jak na przykład. Obraz "Przekroczona przepustowość" jest całkowicie poprawnym obrazem w oczach komputera.
Niemniej jednak można spróbować kilku sztuczek na odfiltrowanie przynajmniej kilka „źle” obrazów:
- W przypadku ładowania obrazów, skonfigurowanie połączenia internetowego, który nie ma automatycznego przekierowania. Możesz ustawić jakiś semantyczny, który klasyfikuje obraz jako "nieprawidłowy", jeśli przekierujemy Cię do innego miejsca, gdzie prawdopodobnie znajduje się obraz "Przekroczona przepustowość". Wadą tej metody jest oczywiście filtrowanie obrazów, które znajdują się za przekierowaniem i które są prawidłowe.
- Po prostu sprawdź nazwę obrazu dostarczonego przez serwer sieciowy. Jeśli łączysz się z adresem takim jak "http://test.tld/image.jpg", ale pobierając "bandwidth_exceeded.jpg" lub coś podobnego, sprawa powinna być jasna. Ta metoda wymaga, abyś wiedział, w jaki sposób hosta obrazu określają swoje "przekroczone przepustowości" lub "nie są już dostępne".
- Jakiś rodzaj rozpoznawania obrazu sprawdzający ze znanymi "złymi" obrazami. To raczej wyrafinowany.
Widzisz, te semantyczne czarne listy są czymś innym niż idealnym, może nawet gorszym filtrują dobre obrazy.
Cóż, nie sądzę, że muszę posunąć się tak daleko, ponieważ przekroczenie przepustowości obrazu pojawiło się jako X, być może dlatego, że był to nieprawidłowy format? – DMan
OK, a potem nie zdałem sobie z tego sprawy ... –
Oczywiście, to powie Ci, że obraz nie może być załadowany (na przykład 404 z serwera), ale nie odfiltrowuje żadnych obrazów, które są wysyłane przez na przykład obraz hosta (na przykład "Przekroczono przepustowość" lub obraz, który serwer wysyła, jeśli obraz został usunięty z serwera). –
+1 i przyjęta jako odpowiedź, twój drugi blok kodu porównujący obraz i obraz błędu działa idealnie. – DMan