如何使用 ColorQuantizerDescriptor? [英] How to use ColorQuantizerDescriptor?
问题描述
遵循 @PhiLho 对如何将 BufferedImage 转换为 8 位? 的回答,我想使用 ColorQuantizerDescriptor
转换一个 BufferedImage
,imageType TYPE_INT_RGB,但 RenderedOp#getColorModel() 抛出以下异常:
这是我尝试使用的代码:
final RenderedOp mediumCutQuantizerOp = ColorQuantizerDescriptor.create(rgbImage, ColorQuantizerDescriptor.MEDIANCUT, 256, null, null, null, null, null);最终 BufferedImage bi = mediumCutQuantizerOp.getAsBufferedImage(null, mediumCutQuantizerOp.getColorModel());
我如何使用ColorQuantizerDescriptor
?
public class Main {public static void main(String[] args) 抛出异常 {BufferedImage original = ImageIO.read(new File("/Users/Nick/Desktop/with_flowers.jpg"));//300 似乎是个不错的数字最终 RenderedOp cqImage = ColorQuantizerDescriptor.create(原始,ColorQuantizerDescriptor.OCTTREE,新整数(255),新整数(300),空,新整数(2),新整数(2),空);断言 cqImage.getColorModel() instanceof IndexColorModel;最终 BufferedImage 转换 = cqImage.getAsBufferedImage();SwingUtilities.invokeLater(new Runnable() {公共无效运行(){最终 JFrame f = new JFrame();f.setTitle("测试");f.getContentPane().add((new ScrollingImagePanel(converted, 300, 300)));f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.pack();f.setVisible(true);}});}}
为我工作:
尝试使用您的中位数剪裁,似乎也能正常工作,但速度要慢得多.
Following the idea of @PhiLho's answer to How to convert a BufferedImage to 8 bit?, I want to use ColorQuantizerDescriptor
to convert a BufferedImage
, imageType TYPE_INT_RGB, but RenderedOp#getColorModel() is throwing the following exception:
java.lang.IllegalArgumentException: The specified ColorModel is incompatible with the image SampleModel. at javax.media.jai.PlanarImage.setImageLayout(PlanarImage.java:541) at javax.media.jai.RenderedOp.createRendering(RenderedOp.java:878) at javax.media.jai.RenderedOp.getColorModel(RenderedOp.java:2253)
This is the code that I am attempting to use:
final RenderedOp medianCutQuantizerOp = ColorQuantizerDescriptor.create(rgbImage, ColorQuantizerDescriptor.MEDIANCUT, 256, null, null, null, null, null);
final BufferedImage bi = medianCutQuantizerOp.getAsBufferedImage(null, medianCutQuantizerOp.getColorModel());
How do I use ColorQuantizerDescriptor
?
The following example has been modified from 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);
}
});
}
}
Works for me:
Edit: tried with your median cut and seems to work as well, though much slower.
这篇关于如何使用 ColorQuantizerDescriptor?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!