AWT10-位图

1.概述

  Graphics提供了drwaImage(Image image)来绘制位图,该方法需要一个位图做参数。

  步骤:

    1.创建Image的子类对象BufferedImage(int width,int height,int Image Type),这相当于在内存生成了一张图片。

    2.调用BufferedImage的getGraphics()方法获得画笔,此时即可在画布上绘图。

    3.调用paint方法的drawImage方法,一次性的将BufferedImage绘制。

    

  1 import java.awt.*;
  2 import java.awt.event.*;
  3 import java.awt.image.BufferedImage;
  4 
  5 public class PainterDemo {
  6     Frame frame = new Frame("简易手绘");
  7 
  8     private final int WIDTH = 500;
  9     private final int HEIGHT = 400;
 10 
 11     private int preX = -1;
 12     private int preY = -1;
 13 
 14     PopupMenu colorMenu = new PopupMenu();
 15     MenuItem blue = new MenuItem("蓝色");
 16     MenuItem red = new MenuItem("红色");
 17     MenuItem green = new MenuItem("绿色");
 18 
 19     private Color paintColor = Color.BLACK;
 20 
 21     BufferedImage bi = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
 22     Graphics ig = bi.getGraphics();
 23 
 24     private class MyCanvas extends Canvas{
 25         @Override
 26         public void paint(Graphics g){
 27             g.drawImage(bi,0,0,null);
 28         }
 29     }
 30 
 31     MyCanvas canvas = new MyCanvas();
 32 
 33 
 34     public void init(){
 35 
 36         ActionListener ColorListener = new ActionListener() {
 37             @Override
 38             public void actionPerformed(ActionEvent e) {
 39                 String command = e.getActionCommand();
 40                 switch (command){
 41                     case "蓝色":
 42                         paintColor = Color.BLUE;
 43                         break;
 44                     case "红色":
 45                         paintColor = Color.RED;
 46                         break;
 47                     case "绿色":
 48                         paintColor = Color.GREEN;
 49                         break;
 50                 }
 51             }
 52         };
 53 
 54         blue.addActionListener(ColorListener);
 55         red.addActionListener(ColorListener);
 56         green.addActionListener(ColorListener);
 57 
 58         colorMenu.add(blue);
 59         colorMenu.add(red);
 60         colorMenu.add(green);
 61 
 62         canvas.add(colorMenu);
 63         canvas.addMouseListener(new MouseAdapter() {
 64             @Override
 65             public void mouseReleased(MouseEvent e) {
 66                 boolean trigger = e.isPopupTrigger();
 67                 if (trigger){
 68                     colorMenu.show(canvas,e.getX(),e.getY());
 69                 }
 70 
 71                 preX = -1;
 72                 preY = -1;
 73             }
 74         });
 75 
 76         ig.setColor(Color.white);
 77         ig.fillRect(0,0,WIDTH,HEIGHT);
 78 
 79         canvas.addMouseMotionListener(new MouseMotionAdapter() {
 80             @Override
 81             public void mouseDragged(MouseEvent e) {
 82                 if (preX >= 0 && preY >= 0){
 83                     ig.setColor(paintColor);
 84                     ig.drawLine(preX,preY,e.getX(),e.getY());
 85                 }
 86 
 87                 preX=e.getX();
 88                 preY=e.getY();
 89 
 90                 canvas.repaint();
 91             }
 92         });
 93 
 94         canvas.setPreferredSize(new Dimension(WIDTH,HEIGHT));
 95         frame.add(canvas);
 96         
 97         frame.addWindowListener(new WindowAdapter() {
 98             @Override
 99             public void windowClosing(WindowEvent e) {
100                 System.exit(0);
101             }
102         });
103         frame.pack();
104         frame.setVisible(true);
105 
106     }
107     public static void main(String[] args) {
108         new PainterDemo().init();
109     }
110 }

 2.ImageIO

  实际生活中,有一种情况是程序打开本地的某张图进行编辑,编辑后重新保存在本地,这种情况要使用ImageIO。

方法名 说明
static BufferedImage read(File input) 读取本地图片
static BufferedImage read(inputStream input) 读取本地图片
static boolean write(renderedImage im,String formatName,File output) 在本地磁盘中输出图片
 1 import javax.imageio.ImageIO;
 2 import java.awt.*;
 3 import java.awt.event.*;
 4 import java.awt.image.BufferedImage;
 5 import java.io.File;
 6 import java.io.IOException;
 7 
 8 public class PhotoViewDemo {
 9     Frame frame = new Frame("图片查看器");
10 
11     MenuBar menuBar = new MenuBar();
12     Menu menu = new Menu("文件");
13     MenuItem open = new MenuItem("打开",new MenuShortcut(KeyEvent.VK_O));
14     MenuItem save = new MenuItem("保存",new MenuShortcut(KeyEvent.VK_S));
15 
16     BufferedImage image;
17 
18     private class MyCanvas extends Canvas{
19         @Override
20         public void paint(Graphics g){
21             g.drawImage(image,0,0,null);
22         }
23     }
24 
25     MyCanvas canvas = new MyCanvas();
26 
27     public void init(){
28 
29         open.addActionListener(e ->{
30             FileDialog fileDialog = new FileDialog(frame,"打开图片", FileDialog.LOAD);
31             fileDialog.setVisible(true);
32             String dir = fileDialog.getDirectory();
33             String file = fileDialog.getFile();
34 
35             try {
36                 image = ImageIO.read(new File(dir,file));
37                 canvas.repaint();
38             } catch (IOException ioException) {
39                 ioException.printStackTrace();
40             }
41         });
42 
43         save.addActionListener(e ->{
44             FileDialog fileDialog = new FileDialog(frame,"保存图片", FileDialog.SAVE);
45             fileDialog.setVisible(true);
46             String dir = fileDialog.getDirectory();
47             String file = fileDialog.getFile();
48 
49             try {
50                 ImageIO.write(image,"JPEG",new File(dir,file));
51             } catch (IOException ioException) {
52                 ioException.printStackTrace();
53             }
54         });
55 
56         menu.add(open);
57         menu.add(save);
58         menuBar.add(menu);
59         frame.setMenuBar(menuBar);
60         frame.add(canvas);
61 
62         frame.pack();
63         frame.setVisible(true);
64         frame.addWindowListener(new WindowAdapter() {
65             @Override
66             public void windowClosing(WindowEvent e) {
67                 System.exit(0);
68             }
69         });
70     }
71     public static void main(String[] args) {
72         new PhotoViewDemo().init();
73     }
74 }

 

posted @ 2020-12-09 09:12  zhiyDevQAQ  阅读(149)  评论(0)    收藏  举报