Менять цвета гистограммы JFreeChart динамически?
Я пытаюсь показать гистограмму изображения и показать только некоторые цвета. Я уже сделал это с помощью JFreeChart и createXYLineChart и получения всех данных путем итерации по всем пикселям.
Чтобы ускорить это, я пытаюсь сделать это с помощью «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 - это цвет, которым они должны быть: [ Когда я обновляюсь, красный цвет переходит к зеленой гистограмме, а зеленый к синей:
Есть ли способ исправить это?