-1

Netbeans で biojava の 1.8.1 リリースを使用し、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();


}
4

1 に答える 1

1

これが機能する場合は、JFrame の paint() メソッドを使用して画像を描画できます。まず、これを確認する必要があります

gfx.drawTo(g2);

gfx側から動作します。画像をファイルに保存して、そこにあるかどうかを確認してください

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

import javax.imageio.*; を使用 インポートステートメントで。

それが機能し、画像が表示される場合は、JFrameで次のようなものが必要です

public void paint(Graphics g) {
  g.drawImage(bi, 0, 0, this);
}
于 2016-02-14T01:45:48.937 に答える