2013-08-21 27 views
6

Powyższa odpowiedź, którą ktoś sugeruje, zamienia mój kolorowy obraz na czarno-biały. Więc nie jest właściwe dla mojego pytania.IllegalArgumentException: Numery źródłowe Pasma rastrowe i komponenty przestrzeni kolorów źródłowych nie pasują Do obrazu kolorowego Wyjątek

File file = new File("path");   
BufferedImage bufferedImage = ImageIO.read(file); 

tutaj jest kod, a poniżej jest obraz. Pobierz obraz i zapisz na swoim komputerze. I spróbuj uruchomić powyższy kod z prawidłową wartością ścieżki, będzie to wyjątek w temacie

Pobierz zdjęcie: https://skydrive.live.com/?cid=19547371C4F3B839&id=19547371C4F3B839%21105

Proszę jeśli ktoś może otrzymać od obiektu java.awt.image.BufferedImage obraz podany jako wystarczający (nie powinien konwertować obrazu na skalę szarości).

Jesteś geniuszem, jeśli potrafisz odpowiedzieć na to pytanie: D. Pomoc Plza.

+0

możliwe powielać http://stackoverflow.com/questions/10416378/imageio-read-illegal-argument-exception-raster-bands-colour-space-components –

+0

Hi Philipp proszę przeczytać moje pytanie dobrze. Wyraźnie wspomniałem "nie należy konwertować obrazu na skalę szarą". Odpowiedź, którą sugerujesz, zamienia mój kolorowy obraz na szary (czarny i biały), jeśli chcesz, spróbuj i zobacz. I nie sugeruj innych pytań i nie dawaj mi - punktów bez wypróbowania go. Bądź odpowiedzialny za swoje komentarze. –

+0

@PhilippSander Podobny problem z tym obrazem różni się od tego, który łączyłeś. – haraldK

Odpowiedz

15

Tutaj nie ma nic złego w tym kodzie. Mogłem odczytać twoje zdjęcie za pomocą mojej wtyczki JPEGImageReader dla ImageIO. Ten czytnik obrazu jest łagodny pod względem błędów JPEG i jest nieco bardziej wydajny niż standardowy Java JPEGImageReader.

Jednak plik JPEG wydaje się mieć wiele problemów, więc nie mogą być odczytywane w 100%:

  • Po pierwsze, profil kolorów ICC w obrazie ma 4 komponentów kolorów, podczas gdy dane obrazu ma tylko 3 składniki kolorów (powoduje to wyjątek, który widzisz). Przyczyną główną jest prawdopodobnie złe oprogramowanie do konwersji. Użyj ExifTool lub podobnego oprogramowania, aby obejrzeć metadane w celu dalszego zbadania. Mój czytelnik po prostu zignoruje profil ICC.
  • Po drugie, strumień JPEG kończy się przedwcześnie (brak EOI). Zauważysz, że w prawym dolnym rogu obrazu znajdują się piksele śmieci. Nic nie możesz na to poradzić, z wyjątkiem uzyskania oryginalnego obrazu (właściwie, obraz zawiera miniaturę, a miniatura jest nieuszkodzona, możesz spróbować odtworzyć dane z tego, jeśli naprawdę potrzebujesz). Obraz zwrócony z mojego czytnika jest spójny z obrazami odczytywanymi przez rodzime oprogramowanie.
+0

Cześć Harald, dziękuję za odpowiedź. Teraz ten błąd jest dla mnie jasny, dzięki za wyjaśnienie. Próbowałem użyć twojej wtyczki, ale z powodu pewnych brakujących bibliotek zależności nie mogłem go skompilować (dodałem słoiki twelvemonkeys-imageio). Czy mógłbyś wyjaśnić dokładny sposób korzystania z wtyczki i byłoby świetnie, gdybyś mógł pokazać prostą próbkę kodu, aby uzyskać buforowanie dla mojego obrazu. –

+2

Szczegóły na temat korzystania z wtyczki w aplikacjach java i kontenerach serwletów można znaleźć tutaj: https://github.com/haraldk/TwelveMonkeys –

+0

Działa jak wdzięk :) – DominikAngerer