awt绘图_ImageIO类
在实际生活中,很多软件都支持打开本地磁盘已经存在的图片进行编辑,编辑完毕后,再重新保存到本地磁盘。如果使用AWT要完成这样的功能,那么需要使用到ImageIO类,可以操作本地磁盘的图片文件
| 方法 | 作用 |
|---|---|
| static BufferedImage read(File input) | 读取本地磁盘图片文件 |
| static BufferedImage read(InputStream input) | 读取本地磁盘图片文件 |
| static boolean write(RenderedImage im,String formatName,File output) | 往本地磁盘中输出图片文件 |
awt绘图_ImageIO类的练习
x
package ch29;
import javax.imageio.ImageIO;import java.awt.*;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;
//随便打开一张电脑的图片,还可以另存为,注意另存为的时候要自己写后缀public class a_9_0awt_绘图_ImageIO的使用 {
private Frame frame = new Frame("图片查看器");
//创建菜单条 MenuBar menuBar = new MenuBar(); //创建菜单 Menu menu = new Menu("文件"); //创建菜单中的菜单名 MenuItem open = new MenuItem("打开"); MenuItem save = new MenuItem("另存为");
//声明BufferImage对象,记录本地存取到内存的图片,到最后读入文件,直接赋值给image BufferedImage image;//还没进行初始化,当点击'打开'去选择某个文件时才进行初始化
//写一个自定义类来继承Canvas private class MyCanvas extends Canvas { //重写paint方法来进行绘图 public void paint(Graphics g) { g.drawImage(image, 0, 0, null);//这行的image拿的是41行的image } }
//给上面那个自定义类创建对象 MyCanvas drawArea = new MyCanvas();
//组装视图 public void init() {
//给'保存'菜单名注册事件 open.addActionListener(e -> { //打开一个文件对话框 FileDialog fileDialog = new FileDialog(frame, "打开图片", FileDialog.LOAD);//参数:父组件、标记、类型 fileDialog.setVisible(true);//可见
//获取用户选择的图片路径以及名称 String dir = fileDialog.getDirectory();//路径 String fileName = fileDialog.getFile();//名称
try { //记得这里要写IO读入的文件,并且赋值给image image = ImageIO.read(new File(dir, fileName));//ImageIO就是我们这节课学的重点 drawArea.repaint();//重绘,即可展示用户选择后的图片 } catch (IOException ex) { ex.printStackTrace(); } });
//给'另存为'菜单名注册事件 save.addActionListener(e -> {
//打开一个对话框 FileDialog fileDialog = new FileDialog(frame, "保存图片", FileDialog.SAVE); fileDialog.setVisible(true);//可见
//获取用户设置的保存路径以及文件名称 String dir = fileDialog.getDirectory();//路径 String fileName = fileDialog.getFile();//名称
try { //注意这里要写”JPEG“,文件格式名 ImageIO.write(image, "JPG", new File(dir, fileName));//第二个参数是当前图片要保存的格式 } catch (IOException ex) { ex.printStackTrace(); } });
//将'打开'open以及'另存为'save放到menu组件中 menu.add(open); menu.add(save);
//将menu组件放在menuBar菜单栏中 menuBar.add(menu);
//把菜单条放到容器里面 frame.setMenuBar(menuBar); frame.add(drawArea);//绘图区域也要放到frame容器里面
//自定义frame的框架,并且可见 frame.setBounds(200, 200, 740, 508);//设置frame容器的位置和大小 frame.setVisible(true);
//窗口监听器,监听窗口关闭的动作,即点击叉号关闭程序 frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } });
//给Frame设置WindowListener监听器,监听用户点击右上角X的动作,则关闭窗口 frame.addWindowListener(new WindowAdapter() { //采用Java通过的适配器设计模式,我们只需要重写自己需要的方法,例如windowClosing方法,如下 public void windowClosing(WindowEvent e) { System.exit(0);//原理:退出JVM虚拟机,即退出当前运行的Java程序 } });
}
public static void main(String[] args) { new a_9_0awt_绘图_ImageIO的使用().init(); }
}