2

BufferedImageを8ビットに変換する方法に対する@PhiLhoの回答のアイデアに従いますか?、 imageType TYPE_INT_RGBColorQuantizerDescriptorの変換に使用したいのですが、 RenderedOp#getColorModel()が次の例外をスローしています。BufferedImage

java.lang.IllegalArgumentException:指定されたColorModelは画像SampleModelと互換性がありません。
    javax.media.jai.PlanarImage.setImageLayout(PlanarImage.java:541)で
    javax.media.jai.RenderedOp.createRendering(RenderedOp.java:878)で
    javax.media.jai.RenderedOp.getColorModel(RenderedOp.java:2253)で

これは私が使おうとしているコードです:

final RenderedOp medianCutQuantizerOp = ColorQuantizerDescriptor.create(rgbImage, ColorQuantizerDescriptor.MEDIANCUT, 256, null, null, null, null, null);
final BufferedImage bi = medianCutQuantizerOp.getAsBufferedImage(null, medianCutQuantizerOp.getColorModel());

どうすれば使えColorQuantizerDescriptorますか?

4

1 に答える 1

3

次の例は、http://code.google.com/p/color-reduction-experiments/source/browse/trunk/it/geosolutions/mapproducers/MapProducersTest.java?r= 2から変更されています。

public class Main {
    public static void main(String[] args) throws Exception {

        BufferedImage original = ImageIO.read(new File("/Users/Nick/Desktop/with_flowers.jpg"));
         // 300 seems to be a good number
        final RenderedOp cqImage = ColorQuantizerDescriptor.create(
           original, ColorQuantizerDescriptor.OCTTREE,
           new Integer(255), new Integer(300), null, new Integer(2),
           new Integer(2), null);

        assert cqImage.getColorModel() instanceof IndexColorModel;
        final BufferedImage converted = cqImage.getAsBufferedImage();
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                final JFrame f = new JFrame();
                f.setTitle("Test");
                f.getContentPane().add((new ScrollingImagePanel(converted, 300, 300)));
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                f.pack();
                f.setVisible(true);
            }
        });
    }
}

私のために働く:八分木を使用する

編集:メディアンカットで試してみましたが、かなり遅くなりましたが、同様に機能するようです。

メディアンカットを使用

于 2013-03-09T17:34:08.107 に答える