Zbyt wielka ilosc obrazów przeciąża pamieć

0

Mam taki problem, napisalem funckje ktora pobiera obraz, obraca go o wskazany kat i zapisuje do tablicy Image[][], przy stosunkowo niewielkiej ilosci obrazów wszystko jest oki, ale gdy dam duża mape (gdyż potrzebuję to do napisanai kafelkowania mapy w grze 2d) to wywala taki komunikat:
java.lang.OutOfMemoryError: Java heap space

A oto ma metoda:

public BufferedImage odwroc_obraz(int kat, String nazwa) throws IOException
	{
		
		BufferedImage bufor_obrazu=null;
		Image obraz = wczytaj_obraz(nazwa);
								
		AffineTransform zmien = new AffineTransform();						
		zmien.rotate(Math.toRadians(kat),WIELKOSC_KAFLA/2,WIELKOSC_KAFLA/2);

     	GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
		try 
		{
            GraphicsDevice gs = ge.getDefaultScreenDevice(); 
            GraphicsConfiguration gc = gs.getDefaultConfiguration();
            bufor_obrazu = gc.createCompatibleImage(obraz.getWidth(null), obraz.getHeight(null));
            
        }
        catch (HeadlessException e) {} 

    	Graphics2D gg = bufor_obrazu.createGraphics ();
    	gg.transform(zmien);
		gg.drawImage ( obraz, 0 , 0 , null ) ;
		gg.dispose();
		
		return bufor_obrazu;
	}
	public Image wczytaj_obraz(String nazwa)
	{
		return new ImageIcon("grafika/"+nazwa).getImage();
	}

W jaki sposób mogę ja poprawić, żeby ten komunikat się nie wyswietlał?:>

0

a) heap_space++
b) img_count--
c) musisz trzymać to wszystko w pamięci?
=]

0

No najlepiej by było trzymac to wszystko w pamieci. W sumie jako ciekawostkę moge dodac, że gdy szczytuje obrazku do tablicy tylko za pomoca tej funkcji:

public Image wczytaj_obraz(String nazwa)
        {
                return new ImageIcon("grafika/"+nazwa).getImage();
        }

czyli bez obracania ich w programie, pamięci mi nie brakuje i wszytko dziala jak powinno

0
  • weź kartkę papieru
  • połóż na tak by dolna krawędź przylegała do krawędzi biurka cyz innego płaskiego o prostych krawędziach cusia
    -obrysuj krawędź
    -obróć kartkę, na przykład o 45 stopni
    -jeden róg będzie poza burkiem, przesuń kartkę do góry by był na jego krawędzi
    -narysuj linię równoległą do krawędzi biurka stykającą się z "górnym" rogiem obróconej kartki
    -połącz krawędź biurka z narysowaną linią dwoma odcinkami prostopadłymi do tej linii tak by pierwszy odcinek stykał się z "lewym" rogiem kartki a drugi z "prawym" rogiem kartki
    -porównaj narysowane prostokąty

Co zauważasz? =]

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