Problemas getSubImage: java.awt.image.RasterFormatException: (y + height) is outside of Raster

Galera, o problema é o seguinte, eu tenho uma imagem grande e tenho que quebrá-la em 4 pedaços(em tamanhos a se definir ainda), até ai blz. Como a imagem é em preto e branco(na verdade é em escala de cinza), eu crio um vetor para receber parte dos pontos em escala de cinza(a parte que eu “mandar”, por exemplo, os 300 primeiros pixels no eixo X até a altura máxima). O problema é quando eu uso método getSubImage() da imagem original para a imagem “cortada”. Ele dispara a exceção: java.awt.image.RasterFormatException: (y + height) is outside of Raster. Segue o código abaixo:

try {
			BufferedImage image = ImageIO.read(new File("C:\\Users\\Hed\\Desktop\\imageColaco.bmp"));
			BufferedImage imagem = new BufferedImage(1600,1000,BufferedImage.TYPE_INT_RGB);//essa imagem tem o mesmo tamanho da anterior
			int novaAltura = 256;//não tem a ver com o tópico
			int novaLargura = 255;//não tem a ver com o tópico
            BufferedImage imagemRedimensionada = new BufferedImage(novaLargura,novaAltura, BufferedImage.TYPE_INT_RGB);//não tem a ver com o tópico
            Graphics2D g2d = imagemRedimensionada.createGraphics();//não tem a ver com o tópico
                        for(int i=0;i<=400;i++){
                             for(int j=0;j<1000;j++){//1000 é a altura máxima
                                    Color cor = new Color(image.getRGB(i,j));
		                            int red = cor.getRed();
		                            int blue = cor.getBlue();
		                            int green = cor.getGreen();
                                        if((red>=200 && red<=250) && (blue>=200 && blue<=250) && (green>=200 && green<=250)){ //algumas escalas de cinza
                                                pontos.add(new Point(i,j));
                                      	}
				}
			}
                        int tamanho = pontos.size()-1;
                        imagem = image.getSubimage(pontos.get(0).x,pontos.get(0).y,pontos.get(tamanho).x,pontos.get(tamanho).y);//exceção dispara aqui - corto a imagem do primeiro ao último ponto 
                        /*REDIMENSIONAMENTO PARA 255X256 */

			g2d.drawImage(imagem,0,0,novaLargura,novaAltura,null);//nada a ver com o tópico
			ImageIO.write(imagemRedimensionada,"bmp",new File("C:\\Users\\Hed\\Desktop\\impressao-digital3.bmp"));//nada a ver com o tópico

Valeu galera!!!