簡體   English   中英

如何在JFreeChart中禁用縮放?

[英]How to disable scaling in JFreeChart?

我們正在使用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個刻度。

看看底部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)有點時髦。

替代文字

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM