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();
}
}