0

私はstackoverflowの新しい投稿者ですが、インスピレーションを得るために常に投稿を読んでおり、コミュニティの一員であることを嬉しく思います.

JPanel に画像を描画していて、その画像をファイルに保存したいと考えています。JPanelでの塗装は問題ないのですが、画像を見ると真っ白か真っ黒です。画像が JPanel での表示どおりに保存されない理由がわかりません。画像をバッファに描画して保存するときに、パネルを正しく参照していない可能性があると思いますか? bufferedImage が空白のようです。私はawtの経験があまりないので、本当にばかげた間違いをしていると感じています。

paintComponent() メソッドを 1 回だけ上書きし、その中で描画を行い (JPanel に問題なく表示されます)、その下で、画像をファイルに保存することになっている saveImage() メソッドを呼び出します。 . しかし、前に述べたように、常に空白のイメージです。コンストラクターで repaint() メソッドを使用します。

この投稿をコード全体で行き詰まらせるつもりはありません。その非常に単純なコードと関連する部分を以下に示します。

class drawingBarcode extends JPanel 

    public drawingBarcode(){
        repaint();
        try{
            Thread.sleep(999);

        }catch(InterruptedException e){
            e.printStackTrace();
        }

public void saveImage() {
    BufferedImage bi = new BufferedImage(350, 150, BufferedImage.TYPE_INT_RGB);    

      Graphics2D g2 = bi.createGraphics();//creates and returns a graphics 2d for drawing into buffer

     //  g2.setColor(color1);
       super.paintComponent(g2);

        g2.dispose();
       try
       {
            ImageIO.write(bi, "jpg", new File("test.jpg\\"));        
       }
       catch(IOException ioe)
       {
        System.out.println("Something went wrong");
            ioe.printStackTrace();
        }

public void paintComponent(Graphics g){
        Graphics2D g2D = (Graphics2D) g;

        super.paintComponent(g2D);

        setStrokeWithPen1(g2D);
        drawAsterix(g2D);//draw asterix(start digit) always

/* some drawing takes place here using g2D. */

        g2D.dispose();
        saveImage();
        }
}

提供できるヘルプやアドバイスは大歓迎です!

4

1 に答える 1

1

画像を保存するルーチンが super.paintComponent を呼び出すため、画像グラフィックスにペイントするときにカスタム ペイント コードがすべて失われます。私はあなたのコードをリファクタリングします-UIがペイントするたびにファイルを保存したくないですか?

于 2012-04-05T06:16:46.693 に答える