我们正在使用JFreeChart构建一个引擎来显示图形。这是一个在Tomcat + Java 1.5.0上运行的Web服务,并将图表呈现为PNG和JPEG(使用ChartUtilities.writeChartAs {PNG,JPEG}())。
我们遇到了一个问题,JFreeChart似乎可以扩展Plot区域内的所有内容,但只有几个像素。结果是图表看起来不一致,例如:
我们已经尝试了1.0.9和1.0.13,结果完全相同(除了小版本,旧版本中没有)。此外,将图像渲染为帧而不是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: 我们已经使用子类化或代理渲染器并在其drawItem()(或类似)方法中的文本中绘制标签。这很好用。 然而,轻微的蜱现在是一个问题 - 它们似乎也在缩放。例如:见第9和第15个刻度。
look at the bottom http://img14.imageshack.us/img14/3625/76676732.jpg
答案 0 :(得分:1)
我无法使用版本1.0.13,Java 1.5,Mac OS X的saveChartAsJPEG()
或writeChartAsPNG()
重现您描述的效果,代码如下:
try {
ChartUtilities.writeChartAsPNG(new FileOutputStream(
new File("test.png")), chart, 600, 400);
} catch (IOException ex) {
ex.printStackTrace();
}
屏幕是否显示相同的工件?更改WIDTH
和HEIGHT
参数或省略水印后会发生什么?您是否使用具有不寻常指标的特殊字体?你尝试过不同的平台吗?
您可以按如下方式运行TimeSeriesChartDemo1
:
java -cp jfreechart-1.0.13.jar:jcommon-1.0.16.jar org.jfree.chart.demo.TimeSeriesChartDemo1
Mac OS 10.5.8,Java 1.5.0_24,JFreeChart 1.0.13,TimeSeriesDemo1,使用saveChartAsPNG()
,ImageIO.read()
和setBackgroundImage()
。 setBackgroundImageAlignment(Align.NORTH_WEST)
虽然有点时髦。