您好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();
}
}
答案 0 :(得分:1)
但我明白我需要添加一个bufferedimage才能保存图像。
如果您愿意,可以在完成所有绘图后创建容器的BufferedImage。有关允许您轻松完成此操作的课程,请参阅Screen Image。
如果您真的想在BufferedImage上绘图,那么请查看Custom Painting Approaches
中的DrawOnImage.java
示例