0

私の仕事は、tiff 画像を 90° 回転させることです。JAI を介してこれを行う方法の例をいくつか見つけました。だから私は見つけた例からコードを書きました:

BufferedImage im = ImageIO.read(new FileInputStream(rasterFilePath));
PlanarImage pi = PlanarImage.wrapRenderedImage(im);
BufferedImage bi = pi.getAsBufferedImage();
AffineTransform at = new AffineTransform();
at.translate(-(im.getWidth() - im.getHeight()) / 2, (im.getWidth() - im.getHeight()) / 2);
at.rotate(Math.toRadians(90), bi.getWidth() / 2, bi.getHeight() / 2);
AffineTransformOp opRotated = new AffineTransformOp(at,AffineTransformOp.TYPE_BILINEAR);
im = opRotated.filter(bi, null);
ImageIO.write(im, "TIFF", new FileOutputStream(rasterFilePath));

そして今、問題は画像を回転させたのですが、色が失われることです。色がグレースケールの新しい回転画像を取得します。gdalツール(gdalinfo)で操作前後の画像の違いを確認したところ、次のようになりました。

前:

Driver: GTiff/GeoTIFF
Files: C:\test.tif
Size is 6000, 7000
Coordinate System is `'
Metadata:
  TIFFTAG_IMAGEDESCRIPTION=image description
  TIFFTAG_XRESOLUTION=1000
  TIFFTAG_YRESOLUTION=1000
  TIFFTAG_RESOLUTIONUNIT=2 (pixels/inch)
Image Structure Metadata:
  COMPRESSION=LZW
  INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left  (    0.0,    0.0)
Lower Left  (    0.0, 7000.0)
Upper Right ( 6000.0,    0.0)
Lower Right ( 6000.0, 7000.0)
Center      ( 3000.0, 3500.0)
Band 1 Block=6000x1 Type=Byte, ColorInterp=Palette
  Color Table (RGB with 256 entries)
    0: 0,0,0,255
    1: 0,0,51,255
    2: 0,0,102,255
    3: 0,0,153,255
    4: 0,0,204,255
    5: 0,0,255,255
    6: 0,51,0,255
    7: 0,51,51,255
    8: 0,51,102,255
    .
    .
    .
    254: 0,0,0,255
    255: 0,0,0,255
Band 2 Block=6000x1 Type=Byte, ColorInterp=Undefined

後:

Driver: GTiff/GeoTIFF
Files: C:\test.tif
Size is 7000, 6000
Coordinate System is `'
Metadata:
  TIFFTAG_XRESOLUTION=1
  TIFFTAG_YRESOLUTION=1
  TIFFTAG_RESOLUTIONUNIT=1 (unitless)
Image Structure Metadata:
  INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left  (    0.0,    0.0)
Lower Left  (    0.0, 6000.0)
Upper Right ( 7000.0,    0.0)
Lower Right ( 7000.0, 6000.0)
Center      ( 3500.0, 3000.0)
Band 1 Block=7000x8 Type=Byte, ColorInterp=Gray
Band 2 Block=7000x8 Type=Byte, ColorInterp=Undefined

このコードで何が欠けているか知っている人はいますか?

4

0 に答える 0