Odczyt obrazu w formacie pgm do tablicy.

0

Witam,
od jakiegoś czasu uczę się programować w Javie.
Piszę program, który ma odczytać obraz pgm, jakoś go przerobić i zapisać.
Zrobiłem sobie klasę Obraz:

class Obraz
{
	private String magicNumber;
	private String comment;
	private int Xres;
	private int Yres;
	private int maxValue;
	private int[][] pixels = new int[Yres][Xres];
	
	public Obraz(Scanner plik)
	{
		magicNumber = plik.nextLine();
		comment = plik.nextLine();
		Xres = plik.nextInt();
		Yres = plik.nextInt();
		maxValue = plik.nextInt();
		for(int i=0; i<Yres; i++)
		{
			for(int j=0; j<Xres; j++)
			{
			pixels[i][j] = plik.nextInt();
			}
		}
		//System.out.println(magicNumber + "..." + comment + "..." + Xres + "..." + Yres + "..." + maxValue);
	}
	
	public void negatyw()
	{
		for(int i=0; i<Yres; i++)
		{
			for(int j=0; j<Xres; j++)
			{
				pixels[i][j] = maxValue - pixels[i][j];
			}
		}
	}
	
	public void zapisz(PrintWriter OUT)
	{
		OUT.println(magicNumber);
		OUT.println(comment);
		OUT.print(Xres);
		OUT.print(Yres);
		OUT.print(maxValue);
		for(int i=0; i<Yres; i++)
		{
			for(int j=0; j<Xres; j++)
			{
				OUT.print(pixels[i][j]);
			}
		}
	}
}

Wedle mojego zamysłu, tworząc obiekt odczytuje z pliku podanego w argumencie wszystkie dane i zapisuje pola obiektu.
No i działa to dobrze z polami początkowymi (rozdzielczość, komentarz itd.) Niestety zapis tablicy pixels już nie działa i wywala mi błąd:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at Obraz.<init>(PrzetwarzanieObrazow.java:91)
at PrzetwarzanieObrazow.main(PrzetwarzanieObrazow.java:41)

Wnioskuję, że gdzieś sięgam poza granice tablicy, ale nie wiem jak i gdzie:/
Wie ktoś jak na to zaradzić?

Chyba wiem gdzie jest źle.
Kiedy tworzę obiekt, konstruktor próbuje zapisać coś do tablicy. A tablica ta tak naprawdę nie ma rozmiaru X na Y. Problem w tym, że nie mam pojęcia jaki tak naprawdę ma rozmiar i jak to zrobić tak, żeby jej rozmiar był ustalany dopiero po ustalenia Xres i Yres.

0

Tworzysz tą tablicę w momencie kiedy Xres i Yres są niezainicjowane (czyli domyślnie mają wartość 0) - stąd rozmiar tablicy jest 0 na 0 i wywala błąd kiedy próbujesz odwołać się do jej elementów. Stwórz tą tablicę, kiedy Xres i Yres zostaną już przypisane konkretne wartości.

0

Dzięki ;) Rzeczywiście nie ogarnąłem że mogę przenieść samo tworzenie do konstruktora.

1 użytkowników online, w tym zalogowanych: 0, gości: 1