2011-11-23 5 views
1

티프 이미지을 시계 방향으로 회전시키는 코드를 발견했지만 jsprollpanel에서 이미지를 스크롤하는 데 너무 많은 시간이 걸리므로 매우 느립니다.Tiff 이미지 회전 문제

1.So 언쟁 이미지 또는

2.Any의 미세 조정이 빠르게 회전 할 아래 코드에서 필요한 회전 할 수있는 쉬운 방법이 있습니다.

  ReadableByteChannel rBytChnl = Channels.newChannel(url); 
     ByteBuffer buffer = ByteBuffer.allocate(4096 * 1024); 
     rBytChnl.read(buffer); 
     byte[] data = buffer.array(); 
     SeekableStream stream = new ByteArraySeekableStream(data); 
     ParameterBlock pb = new ParameterBlock(); 
     pb.add(stream); 
     RenderedOp op = JAI.create("tiff", pb); 
     TransposeType type = TransposeDescriptor.ROTATE_90; 
     ParameterBlock pb1 = new ParameterBlock(); 
     pb1.addSource(op); 
     pb1.add(type); 
     pb1.add(new InterpolationBilinear()); 
     image = JAI.create("transpose", pb1, null); 
+0

이미지를 BufferedImage로 렌더링 한 다음 회전합니다. – MeBigFatGuy

+0

나는 똑같은 짓을했는데 픽셀이 커졌고 이미지의 일부가 잘렸다. 픽셀을 바꾸지 않고 이미지가 필요하다. –

답변

3

나는 내 요구 사항과 잘 작동하도록 아핀 변환을 조정했습니다. 이것은 90도 시계 방향으로 만 회전 할 수 있으며 다른 필요에 따라 코드를 적절하게 변경합니다.

 PlanarImage pi = PlanarImage.wrapRenderedImage(image); 
     BufferedImage bi = pi.getAsBufferedImage(); 
     AffineTransform at = new AffineTransform(); 
      at.translate(-(image.getWidth() - image.getHeight())/2, (image.getWidth() - image.getHeight())/2); 
      at.rotate(Math.toRadians(90),bi.getWidth()/2,bi.getHeight()/2); 
     AffineTransformOp opRotated = new AffineTransformOp(at, 
       AffineTransformOp.TYPE_BILINEAR); 
     image = opRotated.filter(bi, null);