2011-11-23 55 views
1

我發現了一個代碼,以順時針旋轉tiff圖像,但它花費了這麼多時間,甚至在jscrollpanel中滾動圖像也非常緩慢。旋轉tiff圖像的問題

1.So沒有任何簡單的方法來旋轉TIFF圖像或需要在下面的代碼

凡因調整,以迅速地旋轉。

  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);