2

.tiff ファイルのサイズを変更したい。JAI ツールキットを使用して、さまざまな種類の画像のサイズを変更しました。これが私が実装しようとしたものです:

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=ja&authkey=CPCEypgM

前もって感謝します。

4

2 に答える 2

1

これは、元の画像のままであるtempImageを書き出しているためです。

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

これを次のように変更します。

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

または、他のコードを変更して、tempImageの代わりに画像を書き出します

- 編集 -

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

それを試してください:)

于 2010-07-22T08:56:45.880 に答える
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);
于 2010-07-22T12:02:28.013 に答える