Slick2D Image.getColor crash

Hi all! So now I making method which taking screen shot. This is what happens in that method:


if (takeScreenShot) {
			  SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
	        Date date = new Date();
	        File folder = new File("screenshots/");

	        if(!folder.exists()) {
	           folder.mkdirs();
	        }
	        
	        File screenshotFile = new File("screenshots/screenshot-" + format.format(date) + ".png");
	        Image screenshot= new Image(gc.getWidth(), gc.getHeight());
	        g.copyArea(screenshot, 0, 0);
	        
	        ImageOut.write(screenshot, screenshotFile.toString(), false);
	        
	        takeScreenShot = false;
		}

But then it must take screenshot I getting this error:


java.lang.ArrayIndexOutOfBoundsException: 2097152
	at org.newdawn.slick.Image.getColor(Image.java:1364)
	at org.newdawn.slick.imageout.ImageIOWriter.saveImage(ImageIOWriter.java:45)
	at org.newdawn.slick.imageout.ImageOut.write(ImageOut.java:62)
	at org.newdawn.slick.imageout.ImageOut.write(ImageOut.java:97)
	at game.states.MenuState.screenshotChecker(MenuState.java:189)
	at game.states.MenuState.render(MenuState.java:161)
	at org.newdawn.slick.state.StateBasedGame.render(StateBasedGame.java:199)
	at org.newdawn.slick.GameContainer.updateAndRender(GameContainer.java:688)
	at org.newdawn.slick.AppGameContainer.gameLoop(AppGameContainer.java:411)
	at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:321)
	at game.Main.launch(Main.java:67)
	at game.Launcher.main(Launcher.java:40)

Why Image.getColor fails? ??? Can someone explain that or help me? :slight_smile: Thanks in advance :wink:

Are you flipping the image at any point?

As I can see, no.

EDIT:
Then I after “g.copyArea(screenshot, 0, 0);” add “screenshot= screenshot.getFlippedCopy(false, true);” it works but I getting flipped image :frowning:
I dont want flip it, but without it I getting error >:(

Someone can me help solve it??

EDIT:
Finally I solved it, I made only small change, instead of:


Image screenshot = new Image(gc.getWidth(), gc.getHeight());

I write:


Image screenshot = new Image(gc.getWidth() - 1, gc.getHeight() - 1);

And now it works perfectly :stuck_out_tongue:

A quick google revealed this:


BufferedImage image = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
ImageIO.write(image, "png", new File("/screenshot.png"));

Thanks anyway :wink: