2011-06-20 23 views
1

私はEclipseを使ってBlackBerry用のアプリケーションを開発していて、Graphicsオブジェクトで描画された画像を保存する方法があるかどうかを知りたがっています。このアプリケーションではGraphics.Itを使用して円グラフを描画しています私はチャートを表示するためにスクリーンを開きますが、次にスクリーンを呼び出すことによってチャートを作成しようとすると、それはひどくなります。私はチャートをイメージとして保存できるかどうか疑問に思っていました。私は画面を開くたびに何度も繰り返し絵を描き続けています...助けてください...事前に感謝!画像を画像として保存しますか?

+0

グラフをシリアル化/復元して回避するよりも、コードを「面倒」にするバグを修正する方がよいでしょう。ところで、それらを固定してください '?' & '。'キー。 1 '?' 2つ以上の質問は、典型的には、ボソを意味する。 –

答えて

0

私はあなたがjava.awt.Graphicsクラスを使用していると理解しました。 AWTイベントスレッドでのみ描画していることを確認してください。イベントスレッド上のあなたの節約コードを実行するための 使用

SwingUtilities.invokeLater(new Runnable() { 
    public void run() { 
    // YOUR CODE   
    } 
}); 

。別のスレッドから保存しようとすると、画像が完全に描画されないと画像が歪んでしまう可能性があります。

+0

答えがStephan!ありがとうございました!しかし、invokeLater()を使用すると、グラフが表示されません。その時、かなり遅れています...これは、invokeLater()を以前のアプリ? – dragonfly

0

私はブラックベリーAPIを知らないが、あなたの問題に他の方法をとることができる。あなたはオフスクリーンレンダリングを行うことができます。 BufferedImageを作成し、そのGraphicsオブジェクトへの参照を取得し、レンダリングして、たとえばBufferedImageをpngとして保存します。例えば

:ファイルとして、あるいは単にメモリに保存し、一度、すべての描画を行うことができます(あなたが必要なものに依存します)、その後、あなただけの画像をロードするか必要

int width = 200, height = 200; 

// TYPE_INT_ARGB specifies the image format: 8-bit RGBA packed 
// into integer pixels 
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); 

Graphics2D ig2 = bi.createGraphics(); 

// Draw your chart 

ImageIO.write(bi, "PNG", new File("yourImageName.PNG")); 

この方法ファイルから削除するか、画面のg.drawImage()を実行します。

しかし、前に言ったように、これはBlackberry APIに当てはまるかどうかわかりませんが、それはデスクトップのJDK/JREで確実に機能します。

関連する問題