JAI: Rotação e edição(corte) da img rotacionada

Olá pessoal,

estou precisando de ajuda.

  1. Estou criando um programinha que lê imagens scanneadas
  2. Rotaciona elas acertando-as na horizontal (por ex, a img foi scanneada torta )
  3. Corta as bordas que ficaram sobrando após o ajuste.

O passo 1 tá ótimo, abro a imagem
O passo 2, acho o angulo a partir da analise dos pixels da img lida.

		float angle = findAngle(pixelsOriginais,width,height);
		// metodo que faz a analise para achar o angulo do item 2

		float centerX = newImage.getWidth()/2f;
		float centerY = newImage.getHeight()/2f;
		ParameterBlock pb = new ParameterBlock();
		pb.addSource(newImage);
		pb.add(centerX);
		pb.add(centerY);
		pb.add(angle);
		pb.add(new InterpolationBilinear());
		PlanarImage rotatedImage = JAI.create("rotate", pb);
		
		int[] pixelsR = new int[rotatedImage.getWidth()*rotatedImage.getHeight()*rotatedImage.getNumBands()];
		// vetor que recebera os pixels da nova imagem para eu identificar os pontos para corte
		
		Raster inputRaster2 = rotatedImage.getData();
		inputRaster2.getPixels(0,0,rotatedImage.getWidth(),rotatedImage.getWidth(),pixelsR);	
                // *E*R*R*O*

		WritableRaster outputRaster2 = inputRaster2.createCompatibleWritableRaster();
		outputRaster2.setPixels(0,0,rotatedImage.getWidth(),rotatedImage.getWidth(),pixelsR);
		TiledImage imgR = new TiledImage(rotatedImage,1,1);
		imgR.setData(outputRaster2);		
		BufferedImage br = imgR.getAsBufferedImage();		
		ImageIcon ir = new ImageIcon(br);

O erro que recebo (// ERRO*):

	Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Coordinate out of bounds!
	at sun.awt.image.ByteInterleavedRaster.getPixels(Unknown Source)
	at ImageCorrection.main(ImageCorrection.java:103)

Nao entendo o porquê disso.
Se eu simplesmente peco para visualizar o rotatedImage, consigo sem problemas.
Mas na hora de extrair seus pixels pra dar o “crop”, recebo esse erro.
Meu questionamento todo é pq é com este mesmo processo que eu obtenho o vetor de
pixels originais pra fazer o reconhecimento do ângulo de inclinação.

Alguém pode me ajudar?

Você está querendo escrever em um pixel que não existe:

outputRaster2.setPixels(0,0,rotatedImage.getWidth(),rotatedImage.getWidth(),pixelsR);

O que está em negrito não seria a altura, ao invés da largura?

E outra coisa. Seu eu fosse você não usaria jai. Esse algoritmo é muito simples. Para espelhar uma imagem verticalmente ou horizontalmente, vai precisar somente multiplicar a altura ou a largura da imagem por -1.

Para rotacionar vai precisar somente usar uma constante para representar o centro de rotação(Theta).

Usa esse livro como referência. Tá cheio de exemplos nele.

http://homepages.inf.ed.ac.uk/rbf/HIPR2/wksheets.htm

Obrigado pela antenção.
Fiz a alteração, realmente era um erro grosseiro.
Mas ele não era a causa do problema.

O erro persiste, na mesma linha…

Estou olhando os exemplos do referido site.

Olá,

a quem interessar possa, achei a solução do problema:
após rotacionar a imagem é preciso fazer o translate dela,
corrigindo os pontos que ficaram fora da área da mesma.

Obrigado pela atenção de todos.

Veloso