2016-02-14 41 views
-1

我正在使用Netbeans上的1.8.1版本的biojava,並使用ChromatogramGraphic類嘗試創建色譜圖。 (http://www.biojava.org/docs/api1.8/如何將色譜圖顯示爲圖像?

我做了一個文件選擇器來訪問色譜圖,我用的是ChromatogramFactory(從biojava)類創建了文件中的色譜對象。

顯然,這樣的:

http://biojava.org/pipermail/biojava-l/2003-June/003896.html

代碼可以完成我想要的。我不明白它的作用,我不認爲我可以使用類似的語法在我的JFrame上繪製圖像。

任何幫助將不勝感激。

[我到目前爲止。我不知道是什麼大部分確實]

private void renderTrace() throws IOException, UnsupportedChromatogramFormatException { 
    ABIFChromatogram abiChrom = new ABIFChromatogram(); 

    File abi = new File(textarea.getText()); 

    ABITrace abiTrace = new ABITrace(abi); 
    ABIFParser abiParse = new ABIFParser(abi); 
    ChromatogramFactory chromFactory = new ChromatogramFactory(); 


    Chromatogram chrom = ChromatogramFactory.create(abi); 


    ChromatogramGraphic gfx = new ChromatogramGraphic(chrom); 

    gfx.setHeight(240); 
    gfx.setHorizontalScale(2.0f); 
    // set some options that affect the output 
    // turn off filled-in "callboxes" 
    gfx.setOption(ChromatogramGraphic.Option.DRAW_CALL_A, 
      Boolean.FALSE); 
    gfx.setOption(ChromatogramGraphic.Option.DRAW_CALL_C, 
      Boolean.FALSE); 
    gfx.setOption(ChromatogramGraphic.Option.DRAW_CALL_G, 
      Boolean.FALSE); 
    gfx.setOption(ChromatogramGraphic.Option.DRAW_CALL_T, 
      Boolean.FALSE); 
    gfx.setOption(ChromatogramGraphic.Option.DRAW_CALL_OTHER, 
      Boolean.FALSE); 
    // this option controls whether each trace/callbox/etc is scaled/positioned 
    // individually, or whether the scaling is done on all shapes at the level 
    // of the graphics context 
    // enabling this option is recommended for higher-quality output 

    gfx.setOption(ChromatogramGraphic.Option.USE_PER_SHAPE_TRANSFORM, 
      Boolean.TRUE); 

    BufferedImage bi = new BufferedImage(
           gfx.getWidth(), 
           gfx.getHeight(), 
           BufferedImage.TYPE_INT_RGB); 
    Graphics2D g2 = bi.createGraphics(); 
    g2.setBackground(Color.white); 
    g2.clearRect(0, 0, bi.getWidth(), bi.getHeight()); 
    if (g2.getClip() == null) { 
     g2.setClip(new Rectangle(0, 0, bi.getWidth(), bi.getHeight())); 
    } 
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
    // the main event 
    gfx.drawTo(g2); 
    // work-around an OS X bug where sometimes the last Shape drawn 
    // doesn't show up in the output 
    g2.draw(new java.awt.Rectangle(-10, -10, 5, 5)); 


    gfx.drawTo(); 


} 
+0

[鏈接](http://biojava.org/pipermail/biojava-l/2003-June /003896.html) –

回答

1

如果這個工程,那麼你可以使用描繪JFrame的()方法中的圖像。首先你需要確保這一點,從gfx方面起作用

gfx.drawTo(g2); 

工程。嘗試將圖像保存到文件中,看看它是否存在

try { 
    ImageIO.write(bi, "png", new File("gfx-image.png")); 
} catch (IOException ex) { ex.printStackTrace(); } 

with import javax.imageio。*;在你的進口報表中。

如果這樣的作品,你可以看到圖像,然後在JFrame中,你需要有類似

public void paint(Graphics g) { 
    g.drawImage(bi, 0, 0, this); 
} 
+0

我加入了下面的'嘗試ImageIO.write(bi,「png」,new File(「gfx-image.png」)); (IOException異常){ex.printStackTrace(); ''但我不知道它做了什麼。我如何知道圖片是否已創建? –

+0

它應該將圖像保存到當前目錄下的文件「gfx-image.png」;檢查是否已經創建了具有該名稱的圖像 - 運行該程序後 – gpasch

+0

它工作正常! [鏈接](https://drive.google.com/file/d/0B5nGPfKaY21KeWtaRTdySXlYQmM/view?usp=sharing)我有這張照片。我很抱歉打擾你,但我對此很新。我怎樣才能在我的JFrame上繪製這個?此外,圖片很長(2018年核苷酸長),所以我怎樣才能讓它滾動到一邊? @ gpasch nvm,編輯的問題已經回答。我會在其他地方查找第二部分的答案,謝謝! –

相關問題