Olá pessoal,
estou precisando de ajuda.
- Estou criando um programinha que lê imagens scanneadas
- Rotaciona elas acertando-as na horizontal (por ex, a img foi scanneada torta )
- 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?