1

Javaソケットを使用して描画プログラムを開発しています。複数のユーザーが描画してjpegとして保存できます。現在、私の画像保存機能は空白のキャンバスのみを保存します。描いた座標は保存できません。

以下のコードの一部を共有しています。=)

座標エラーの送信が発生しているJavaソケットを使用しているため、キャンバスクラスにペイントまたはペイントコンポーネントを使用しませんでした。代わりに、massDraw() を使用しています。

    class Canvas extends JPanel {
    private int x, y;
    private float x2, y2;

    public Canvas() {
        super();
        this.setBackground(Color.white);
    }

    public void massDraw(int px, int py, int x, int y, int red, int green,
            int blue, int size) {
        Graphics g = canvas.getGraphics();
        Graphics2D g2d = (Graphics2D) g;
        g2d.setRenderingHints(myBrush);

        g2d.setStroke(new BasicStroke(size, BasicStroke.CAP_ROUND,
                BasicStroke.JOIN_BEVEL));
        g2d.setColor(new Color(red, green, blue));
        g.drawLine(px, py, x, y);

    }


}// end Canvas class

SaveJpegOP クラス

class saveJpegOP implements ActionListener {

    public void actionPerformed(ActionEvent e) {
        // Ask for file name
        String str = JOptionPane
                .showInputDialog(null, "Enter File Name : ");
        // save as jpeg
           BufferedImage bufImage = new BufferedImage(canvas.getSize().width, canvas.getSize().height,BufferedImage.TYPE_INT_RGB);  
           canvas.paint(bufImage.createGraphics());  



        try {
            ImageIO.write(bufImage, "jpg", new File(str + ".jpg"));
        } catch (IOException ex) {
            ex.printStackTrace();
        }

    }

}
4

1 に答える 1

1

空白のキャンバスは呼び出されないため保存されます。特に、で呼び出したmassDraw()ときに呼び出されません。canvas.paint(bufImage.createGraphics())saveJpegOP

paint()基本的にコンポーネント全体を再描画し、それをオーバーライドしないことを決定したため(またはpaintComponent())、drawMass()呼び出されることはなく、空のキャンバスがペイントされます。

したがって、適切なパラメータをオーバーライドpaintComponent()して呼び出す必要があります。massDraw()パラメータ値は、たとえば、Canvasクラスのプロパティとして以前に設定できます。

于 2012-12-18T14:18:35.120 に答える