gpt4 book ai didi

java - 如何禁用 JFreeChart 中的缩放?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:19:22 25 4
gpt4 key购买 nike

我们正在使用 JFreeChart 构建一个引擎来显示图形。这是一个在 Tomcat + Java 1.5.0 上运行的 Web 服务,并将图表呈现为 PNG 和 JPEG(使用 ChartUtilities.writeChartAs{PNG,JPEG}() )。

我们遇到了一个问题,JFreeChart 似乎可以缩放绘图区域内的所有内容,但只能缩放几个像素。结果是图形看起来不一致,例如:

  • 小刻度线有时会水平拉伸(stretch),因此它们看起来像两个像素宽而不是一个像素。
  • 我们使用绘图区域右上角的小图像作为水印。这在靠近(但不完全)其中间的某个地方水平和垂直拉伸(stretch)了一个像素。
  • 背景网格线似乎出现在子像素边界上。我还没有找到创建精确点状网格线的方法。

我们已经尝试了 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

最佳答案

我无法在代码中使用版本 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();
}

屏幕是否显示出相同的伪像?当您更改 WIDTHHEIGHT 参数或省略水印时会发生什么情况?您是否使用具有不寻常指标的特殊字体?您是否尝试过其他平台?

您可以按如下方式运行 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) 有点古怪。

alt text

关于java - 如何禁用 JFreeChart 中的缩放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2904863/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com