0

ユーザーが線、ボックス、テキスト、さらには JPEG を描画できるペイント プログラムがあります。

ユーザーが描いた画像を保存できるようにしたいのですが、ユーザーの作成したものを簡単に操作できる形式 (Image または BufferedImage) に変換する方法について少し混乱しています。

ユーザーは JPanel にコンテンツを描画します (この JPanel を inputPanel と呼びましょう)。ユーザーがボタンをクリックした場合 (このボタンを saveButton と呼びましょう)。JFileChooser がポップアップし、どこに保存するかを尋ねると、BAM が作成されます (プログラムでイメージを保存する方法は既に知っています)。

この方法で JPanel を Image または BufferedImage にキャストまたは変換する簡単な方法はありますか?

グーグル/検索StackOverFlowは、setIcon()を使用してJPanelに画像を描画するソリューションのみを提供しますが、これは役に立ちません。

4

1 に答える 1

5

それを行う方法の小さな例:

public class Example
{
    public static void main ( String[] args )
    {
        JPanel panel = new JPanel ( new FlowLayout () )
        {
            protected void paintComponent ( Graphics g )
            {
                super.paintComponent ( g );
                g.setColor ( Color.BLACK );
                g.drawLine ( 0, 0, getWidth (), getHeight () );
            }
        };
        panel.add ( new JLabel ( "label" ) );
        panel.add ( new JButton ( "button" ) );
        panel.add ( new JCheckBox ( "check" ) );


        JFrame frame = new JFrame (  );
        frame.add ( panel );
        frame.pack ();
        frame.setVisible ( true );

        BufferedImage bi = new BufferedImage ( panel.getWidth (), panel.getHeight (), BufferedImage.TYPE_INT_ARGB );
        Graphics2D g2d = bi.createGraphics ();
        panel.paintAll ( g2d );
        g2d.dispose ();

        try
        {
            ImageIO.write ( bi, "png", new File ( "C:\\image.png" ) );
        }
        catch ( IOException e )
        {
            e.printStackTrace ();
        }

        System.exit ( 0 );
    }
}

パネルに配置またはペイントされたものはすべて BufferedImage に保存され、指定された場所にある image.png ファイルに保存されます。

画像にペイントするには、パネルが表示されている必要があります (一部のフレームで実際に表示されている必要があります)。そうしないと、空の画像が表示されます。

于 2013-08-15T10:50:47.387 に答える