2010-07-22 2 views
2

Я хочу изменить размер файла .tiff. Я использовал инструментарий JAI для изменения размеров изображений разных типов. Вот что я пытался реализовать:Как изменить размер изображения tiff в java?

int imageWidth = 330; 
     int imageHeight = 490; 

     BufferedImage tempImage = new BufferedImage(imageWidth, imageHeight,BufferedImage.TYPE_INT_RGB); 
     Graphics2D graphics2D = tempImage.createGraphics(); 
     graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BICUBIC); 
     graphics2D.drawImage(tempImage, 0, 0, imageWidth, imageHeight, null); 
     graphics2D.dispose();   

     File outfile = new File("D:/Work/YoursGallery/output.tif"); 

     BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(outfile)); 

     FileSeekableStream ss = new FileSeekableStream("D:/Work/YoursGallery/sample1.tif"); 

     ImageDecoder dec = ImageCodec.createImageDecoder("tiff", ss, null); 
     TIFFEncodeParam param = new TIFFEncodeParam(); 
     param.setTileSize(tempImage.getWidth(), tempImage.getHeight()); 


     TIFFImageEncoder encoder = (TIFFImageEncoder) TIFFCodec.createImageEncoder("tiff", out, param);   
     encoder.encode(dec.decodeAsRenderedImage()); 

     out.close(); 

Созданное изображение имеет тот же размер, что и исходное изображение. Кто-нибудь может рассказать, в чем проблема?

Вот пример изображения tiff, который я использую для его проверки.

http://docs.google.com/fileview?id=0BxCDhEXNFvbeMTYyMGZmNDYtODhhNy00YWI3LTkxNDgtZTNhM2FhMjg5Y2Q3&hl=en&authkey=CPCEypgM

Спасибо заранее.

ответ

1

Это потому, что вы пишете tempImage, который по-прежнему является исходным изображением.

graphics2D.drawImage(image, 0, 0, imageWidth, imageHeight, null); 

изменить что:

graphics2D.drawImage(tempImage, 0, 0, imageWidth, imageHeight, null); 

или изменить другой код, чтобы написать изображение вместо tempImage

--Edit--

OK Попытка 2. Может быть, имея источник и пункт назначения - это глупо.

BufferedImage bsrc = ImageIO.read(new File(src)); 
    BufferedImage bdest = 
     new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 
    Graphics2D g = bdest.createGraphics(); 
    AffineTransform at = 
     AffineTransform.getScaleInstance((double)width/bsrc.getWidth(), 
      (double)height/bsrc.getHeight()); 
    g.drawRenderedImage(bsrc,at); 

Попробуйте это :)

+0

изменения как за предложение, но по-прежнему получать изображение, имеющее ту же размерность, как исходное изображение имеет. –

+0

Извините, у меня есть еще одно предложение для вас, прежде чем я сдаюсь :) – willcodejavaforfood

+0

Создает изображение с ожидаемым размером, но изображение целиком черное. –

0

1) Вы пишете tempImage внутри себя:

graphics2D.drawImage(tempImage, 0, 0, imageWidth, imageHeight, null); 

Должно быть:

graphics2D.drawImage(originalImage, 0, 0, imageWidth, imageHeight, null); 

2) Вы пишете изображение, которое вам просто прочитайте (почему вы читаете его кстати?):

encoder.encode(dec.decodeAsRenderedImage()); 

Должно быть:

encoder.encode(tempImage); 
+0

Изменения применяются и тестируются, но все еще получают черное изображение. –

Смежные вопросы