我正在尝试显示一张图片的直方图,并仅显示某些颜色。我已经使用JFreeChart和createXYLineChart完成了这项任务,并通过迭代所有像素来获取所有数据。
为了加快速度,我正在尝试使用“createHistogram”完成。我遵循了这个代码。
为了使用新值更新图表,我使用了以下两种方法:
但根据我所见,这只在我第一次绘制代码时有效,接下来对不同系列的绘图将采用相同的颜色。下面是一个例子,RGB是它们应该是的颜色: [
当我使用红色更新时,红色转到绿色直方图,绿色转到蓝色直方图:
有没有办法解决这个问题?
为了加快速度,我正在尝试使用“createHistogram”完成。我遵循了这个代码。
为了使用新值更新图表,我使用了以下两种方法:
XYPlot plot = (XYPlot) chart.getPlot();
plot.setDataset(setHistogram(red, green, blue));
设置setHistogram方法根据勾选的复选框(红色,绿色和蓝色)返回一个HistogramDataset。这个方法按预期工作。
当我这样做时,第二件事情是更新每个系列的颜色,否则它们会得到默认值。我按照与值大致相同的过程进行了操作:
private void setHistogramColors(boolean red, boolean green, boolean blue) {
XYPlot plot = (XYPlot) chart.getPlot();
XYBarRenderer renderer = (XYBarRenderer) plot.getRenderer();
renderer.setBarPainter(new StandardXYBarPainter());
Paint[] paintArray = null;
if (red) {
if (green) {
if (blue) {
paintArray = new Paint[3];
paintArray[0] = new Color(0x80ff0000, true);// translucent red, green & blue
paintArray[1] = new Color(0x8000ff00, true);
paintArray[2] = new Color(0x800000ff, true);
} else {
paintArray = new Paint[2];
paintArray[0] = new Color(0x80ff0000, true);
paintArray[1] = new Color(0x8000ff00, true);
}
} else {
paintArray = new Paint[1];
paintArray[0] = new Color(0x80ff0000, true);
}
} else if (green) {
if (blue) {
paintArray = new Paint[2];
paintArray[0] = new Color(0x8000ff00, true);
paintArray[1] = new Color(0x800000ff, true);
} else {
paintArray = new Paint[1];
paintArray[0] = new Color(0x8000ff00, true);
}
} else if (blue){
paintArray = new Paint[1];
paintArray[0] = new Color(0x800000ff, true);
}
else {
return;
}
plot.setDrawingSupplier(new DefaultDrawingSupplier(
paintArray,
DefaultDrawingSupplier.DEFAULT_FILL_PAINT_SEQUENCE,
DefaultDrawingSupplier.DEFAULT_OUTLINE_PAINT_SEQUENCE,
DefaultDrawingSupplier.DEFAULT_STROKE_SEQUENCE,
DefaultDrawingSupplier.DEFAULT_OUTLINE_STROKE_SEQUENCE,
DefaultDrawingSupplier.DEFAULT_SHAPE_SEQUENCE));
}
但根据我所见,这只在我第一次绘制代码时有效,接下来对不同系列的绘图将采用相同的颜色。下面是一个例子,RGB是它们应该是的颜色: [
![2]](https://istack.dev59.com/AqugL.webp)
![](https://istack.dev59.com/2jQny.webp)