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 }
AWT10-位图的更多相关文章
- SQLSERVER中NULL位图的作用
SQLSERVER中NULL位图的作用 首先感谢宋沄剑提供的文章和sqlskill网站:www.sqlskills.com,看下面文章之前请先看一下下面两篇文章 SQL Server误区30日谈-Da ...
- Oracle位图索引
索引由KEY和Data组成 位图索引的KEY比普通非唯一性索引多包含一个组成部分,分区,分区是将数据按行由内部机制分段以达到比较好的检索效率 位图索引的Data中,该索引KEY中数据值在分区段中按行分 ...
- 基于位图(Bitmap、BitmapData)的图片处理方法(C#)
目前操作位图的主流方法有三种: 1.基于Bitmap像素的处理方法,以GetPixel()和SetPixel()方法为主.方法调用简单,但是效率偏低. 2.基于内存的像素操作方法,以System.Ru ...
- 【读书笔记】《编程珠玑》第一章之位向量&位图
此书的叙述模式是借由一个具体问题来引出的一系列算法,数据结构等等方面的技巧性策略.共分三篇,基础,性能,应用.每篇涵盖数章,章内案例都非常切实棘手,解说也生动有趣. 自个呢也是头一次接触编程技巧类的书 ...
- Atitit 索引技术--位图索引
Atitit 索引技术--位图索引 索引在数据结构上可以分为三种B树索引.位图索引和散列索引 存储原理 编辑 位图索引对数据表的列的每一个键值分别存储为一个位图,Oracle对于不同的版本,不同的操作 ...
- DIB位图(Bitmap)的读取和保存
设备无关位图(Device Independent Bitmap)是可以保存在磁盘的位图文件,可以从磁盘读取到内存或者从内存保存到磁盘上.它的文件结构是标准化的,可以在Windows/Linux/Un ...
- Oracle索引梳理系列(四)- Oracle索引种类之位图索引
版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...
- Quartz2D 编程指南(四)位图与图像遮罩、CoreGraphics 绘制 Layer
概览 图形上下文 路径 颜色与颜色空间 变换 图案 阴影 渐变 透明层 Quartz 2D 中的数据管理 位图与图像遮罩 CoreGraphics 绘制 Layer 位图与图像遮罩 简介 位图与图像遮 ...
- CDC的StretchBlt函数载入位图时图片失真问题
最近遇到加载的bmp图片出现失真问题,查找得知需要用SetStretchBltMode函数设置拉伸模式. 函数原型:int SetSTretchBltMode(HDC hdc, int iStretc ...
- 位图切割器&位图裁剪器
位图切割器: 虽然网上有类似的工具,PhotoShop 也有类似功能,但前者似乎不支持超大位图切割(以 G 计大小),而后者的切割块数量好像有比较小的限定范围,于是自己动手写了这个工具. 至于为什么是 ...
随机推荐
- 攻防世界-PHP文件包含
<?php show_source(__FILE__); echo $_GET['hello']; $page=$_GET['page']; while (strstr($page, " ...
- MYSQL渗透测试
部分来源于:先知社区 MYSQL-getshell篇 通过日志getshell 查看日志的物理路径(绝对路径) show variables like '%general%'; 打开日志记录内容 se ...
- redhat-DHCP服务的配置与应用
DHCP服务器为客户端提供自动分配IP地址的服务,减轻网管的负担 首先 rpm -q dhcp 查看是否安装dhcp yum -y install dhcp进行安装 安装完成 dhcp服务配置 dhc ...
- 如何将IDM中的进程设置进行备份
有时候我们想用浏览器自带的下载管理器进行下载,但是一点下载却被IDM(Internet Download Manager)自动嗅探捕获并下载,还有人因为重装系统使得之前更改IDM的设置都失效,只得重新 ...
- Camtasia快捷键大全
Camtasia是一款专业屏幕录制软件,它能在任何颜色模式下轻松地记录屏幕动作,另外它还具有即时播放和编辑压缩的功能.在生活上应用范围相当的广泛.在实际运用中如果能了解到相关的快捷键知识,相信是一定程 ...
- guitar pro系列教程(二十二):Guitar Pro在乐谱上的工作【二】
我们在上一篇文章中给大家介绍了Guitar Pro的工作面板和音轨功能,今天我们将会给大家介绍Guitar Pro这款吉他谱学习软件得音频设置面板,在该面板中包含了声卡得选择.MIDI的输入输出及音轨 ...
- H5系列之contenteditable
其实这个属性很简单,既然把它放到一个单独的文章来说,他肯定有一些注意点要讲 兼容性很好,兼容所有主流浏览器. 用法很简单,只需要给你需要的标签填上即可. <div contenteditable ...
- k8S 搭建集群
k8S 搭建集群1:修改主机名称hostnamectl --static set-hostname masterhostnamectl --static set-hostname node1hostn ...
- NOIP2015 解题报告
Day1 T3 运输计划 二分之后做一遍树上差分,找出被所有时间超限的运输计划覆盖的花费时间最长的航道,将其改造成虫洞. LCA 用倍增求可能会被卡常,建议用 Tarjan 求.
- 1.Cobaltstrike 安装与简介
1.Cobaltstrike 安装与简介 一.简介 Cobalt Strike是一款美国Red Team开发的渗透测试神器,常被业界人内称为CS.自去年起, Cobaltstrike升级到3.0版本, ...