1

画像を PNG 形式に変換しようとしています。私が持っているデータは、LZW で圧縮された 4 バンド 32 ビットの TIFF のような画像です。Java2D と JAI を使用することで、CMYK 空間で色を表現するために圧縮されていないデータが得られ、4 バンド 32 ビット形式と同じ設定で tiff に保存すると、データをエクスポートして表示できます。

問題は、PNG などの他の形式に変換しようとすると、サイズがゼロのデータが生成されることです。そのような画像を変換した経験がある人はいますか? 参照用に私のコードの一部を以下に貼り付けました。間違いが見つかった場合は修正してください。ありがとう!!

int bands = 4;
int w = sizeParam.getHorizonPts();
int h = sizeParam.getVerticalPts();
ColorModel cm = new ComponentColorModel(new CMYKColorSpace(), new int[]{8,8,8,8},
                false, false, Transparency.OPAQUE, DataBuffer.TYPE_FLOAT);

// Create WritableRaster with four bands
WritableRaster r = RasterFactory.createBandedRaster(
                DataBuffer.TYPE_FLOAT, w, h, bands, null);
for (int i = 0; i < bandStreams.length; i++) {
        int x, y;
        x = y = 0;
        byte[] uncomp = new byte[w * h];
        decoder.decode(bandStreams[i], uncomp, h);
        for (int pos = 0; pos < uncomp.length; pos++) {
                r.setSample(x++, y, i, (float) (uncomp[pos] & 0xff) / 255);
                if (x >= w) {
                        x = 0;
                        y++;
                }
        }
}

// Create TiledImage
TiledImage tiledImage = new TiledImage(0, 0, w, h, 0, 0,
                RasterFactory.createBandedSampleModel(DataBuffer.TYPE_FLOAT, w,
                                h, bands), cm);
tiledImage.setData(r);
JAI.create("filestore", tiledImage, "test.tif", "TIFF");
4

1 に答える 1

0

PNG画像を生成できるように、CMYKをRGBに変換することで最終的にこれを解決しました。コースでは次のコードが使用されます。

// Create target image with RGB color.
BufferedImage result = new BufferedImage(w, h,
            BufferedImage.TYPE_INT_RGB);

// Convert pixels from YMCK to RGB.
ColorConvertOp cmykToRgb = new ColorConvertOp(new CMYKColorSpace(),
            result.getColorModel().getColorSpace(), null);
cmykToRgb.filter(r, result.getRaster());
于 2012-11-01T23:21:28.513 に答える