Мы используем JFreeChart для создания движка для отображения графиков. Это веб-служба, которая работает на Tomcat + Java 1.5.0 и отображает диаграммы в PNG и JPEG (используя ChartUtilities.writeChartAs {PNG, JPEG} ()).
Мы столкнулись с проблемой, когда JFreeChart, кажется, масштабирует все в области графика, но только на несколько пикселей. В результате график выглядит непоследовательным, например ::1003
- Незначительные галочки иногда растягиваются по горизонтали, так что они кажутся шириной в два пикселя вместо одного.
- Мы используем небольшое изображение в правом верхнем углу области графика в качестве водяного знака. Это растянуто на один пиксель по горизонтали и вертикали где-то рядом (но не совсем) с его серединой.
- Кажется, что фоновые линии сетки появляются на границах субпикселей. Я не нашел способ создать точно пунктирную линию сетки.
Мы попробовали и 1.0.9, и 1.0.13, с абсолютно одинаковыми результатами (за исключением мелких тиков, которые не были доступны в более старой версии). Кроме того, рендеринг изображения в Frame вместо JPEG / PNG дал идентичный результат.
Помощь с благодарностью, заранее:)
РЕДАКТИРОВАТЬ: SSCCE:
@Test
public void testScaling1() throws InterruptedException {
// Load Image:
Component dummy = new Component() {};
MediaTracker tracker = new MediaTracker(dummy);
Image img = Toolkit.getDefaultToolkit().getImage("C:\\My\Image.gif");
tracker.addImage(img, 0);
tracker.waitForAll();
// Build Data set and base chart.
TimeSeriesCollection dataset = new TimeSeriesCollection();
TimeSeries ts = new TimeSeries("Sample");
ts.add(new Second(0, 0, 0, 1, 1, 1900), 1.0);
ts.add(new Second(1, 0, 0, 1, 1, 1900), 3.0);
ts.add(new Second(2, 0, 0, 1, 1, 1900), 4.0);
ts.add(new Second(3, 0, 0, 1, 1, 1900), 2.0);
dataset.addSeries(ts);
JFreeChart chart = ChartFactory.createTimeSeriesChart(
"blabla",
null,
null,
dataset,
true,
true,
false
);
// Add BG image in top-right corner.
XYPlot xy = chart.getXYPlot();
xy.setBackgroundAlpha(0.0F);
xy.setBackgroundImage(img);
xy.setBackgroundImageAlignment(Align.NORTH_WEST);
xy.setBackgroundImageAlpha(1.0F);
paintChart(chart);
}
Используйте изображение с мелким шрифтом или сетку. Это покажет эффект масштабирования на фоновом изображении.
Редактировать 2:
Мы прибегли к созданию подклассов или проксированию Renderers и рисованию метки в тексте их методами drawItem () (или аналогичными). Это хорошо работает.
Тем не менее, небольшие тики теперь являются проблемой - они также, похоже, масштабируются. Например: см. 9-й и 15-й тики.
посмотрите внизу http://img14.imageshack.us/img14/3625/76676732.jpg