在bufferedimage Java上添加和绘制

时间:2015-03-27 15:12:46

标签: java swing bufferedimage

您好fellas我在尝试绘制和保存绘图时遇到了一些问题。目前我正在绘制一个容器,但我知道我需要添加一个bufferedimage才能保存图像。

我的问题是,我可以在容器中添加bufferedimage吗?

我的绘图功能是:

private void PaintFreeHand(Graphics g)
{

    Graphics2D g2 = (Graphics2D) g;
    g2.setColor(paintTool.getPaintColor());
    g2.setStroke(new BasicStroke(10));
    g2.drawLine(x, y, x1, y1);
}

其余代码是:

import java.awt.AlphaComposite;
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.MouseInfo;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.font.GraphicAttribute;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;



public class PaintGUI extends JFrame {

    private JButton brush;
    private JButton removeBrush;
    private JButton chooseColor;
    private JToolBar toolBar;
    private Container cont;
    private PaintTool paintTool;
    private int x,y,x1,y1;
    private JSlider changeBrushSize;
    private boolean drawing = true, drawBrush = false,remove = false;
    private Color bgColor=Color.lightGray;
    public PaintGUI()
    {
        super("Paint - Fist14 version 0.0.3");
        initiateVariabels();
        buildPaintWindow();
        configureWindow();
        buildMenu();
        setBackgroundColor(this.bgColor);
    }

    private void buildMenu() {
        MenuItemListener menuList = new MenuItemListener();

        JMenuBar menuBar = new JMenuBar();

        JMenu menu = new JMenu("File");
        menuBar.add(menu);

        JMenuItem item = new JMenuItem("New");
        item.addActionListener(menuList);

        menu.add(item);
        item = new JMenuItem("Open");
        item.addActionListener(menuList);

        menu.add(item);
        item = new JMenuItem("Save");
        item.addActionListener(menuList);

        menuBar.add(menu);
        this.cont.add(menuBar,BorderLayout.NORTH);

    }

    private void configureWindow() {
        toolBar.add(brush);
        toolBar.add(changeBrushSize);
        toolBar.add(removeBrush);
        toolBar.add(chooseColor);
        cont.add(toolBar,BorderLayout.SOUTH);

    }

    private void buildPaintWindow() {
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setSize(800,800);
        this.setResizable(false);
        this.setLocationRelativeTo(null);
        this.setVisible(true);

    }

    private void initiateVariabels() {

        //settings for JSlider that will change the size for the brush
        changeBrushSize = new JSlider(JSlider.HORIZONTAL,1,65,1);
        changeBrushSize.setMajorTickSpacing(30);
        changeBrushSize.setMinorTickSpacing(15);
        changeBrushSize.setPaintTicks(true);
        changeBrushSize.setPaintLabels(true);
        changeBrushSize.setValue(0);
        changeBrushSize.setPreferredSize(new Dimension(100, 50));
        changeBrushSize.addChangeListener(new SliderListener());
        //JButton
        brush = new JButton("Brush");
        removeBrush = new JButton("Remove");
        chooseColor = new JButton("Color");

        this.cont = this.getContentPane();
        //add actionlisteners
        brush.addActionListener(new ButtonListener());
        removeBrush.addActionListener(new ButtonListener());
        chooseColor.addActionListener(new ButtonListener());
        cont.addMouseMotionListener(new MouseMoveListener());

        toolBar = new JToolBar();
        paintTool = new PaintTool();


    }

    private void setBackgroundColor(Color c)
    {
        this.bgColor=c;
        cont.setBackground(paintTool.getPaintColor());
    }
    private Color getBackgroundColor()
    {
        return this.bgColor;
    }
    private void PaintFreeHand(Graphics g)
    {

        Graphics2D g2 = (Graphics2D) g;
        g2.setColor(paintTool.getPaintColor());
        g2.setStroke(new BasicStroke(10));
        g2.drawLine(x, y, x1, y1);
    }
    private class MouseMoveListener implements MouseMotionListener
    {

        @Override
        public void mouseDragged(MouseEvent e) {
            if(drawBrush == true)
            {
                x =x1; y = y1;
                x1 = e.getX();
                y1 = e.getY();
                if(x1 >=700)
                    x1=700;
                else if(x1 <= 0)
                    x1=0;
                else if(y1 >=700)
                    y1=700;
                else if(y1<=0)
                    y1=0;

                if(drawing){
                    x = x1;
                    y = y1;
                    drawing  = false;
                }
                PaintFreeHand(getGraphics());

            }

        }

        @Override
        public void mouseMoved(MouseEvent e) {
            x1 = e.getX();
            y1 = e.getY();
        }

    }
    private class ButtonListener implements ActionListener
    {

        @Override
        public void actionPerformed(ActionEvent e) {
            if(e.getActionCommand().equals("Brush"))
            {
                drawBrush = true;
            }

            else if(e.getActionCommand().equals("Color"))
            {

                Color setColor = JColorChooser.showDialog(null, "Pick a color", Color.black);

                if(setColor == null)
                    setColor = Color.black;

                paintTool.setPaintColor(setColor);
            }
            else if(e.getActionCommand().equals("Remove"))
            {

                paintTool.setPaintColor(getBackgroundColor());
            }

        }

    }

    private class SliderListener implements ChangeListener
    {

        @Override
        public void stateChanged(ChangeEvent e) {
            changeBrushSize = (JSlider)e.getSource();
            paintTool.changeBrushSize(changeBrushSize.getValue());

        }

    }
    private class MenuItemListener implements ActionListener
    {
        @Override
        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub
            String menuItemText = e.getActionCommand();
            switch(menuItemText)
            {
            case "New":
                //
                setBackground(bgColor);
                break;
            case "Open":

                break;
            case "Save":

                break;



            }
        }
    }
    public static void main(String[] args) {    
        new PaintGUI();
    }

}

1 个答案:

答案 0 :(得分:1)

  

但我明白我需要添加一个bufferedimage才能保存图像。

如果您愿意,可以在完成所有绘图后创建容器的BufferedImage。有关允许您轻松完成此操作的课程,请参阅Screen Image

如果您真的想在BufferedImage上绘图,那么请查看Custom Painting Approaches

中的DrawOnImage.java示例