Java -- AWT 画图,图像处理
1. AWT画图 Graphics类 提供绘制简单图形的方法
更新图片时用到 repaint , update , 程序不应该主动调用paint和update, 这两个方法都应该是由AWT系统负责调用,用户重写paint 即可。
示例:
- public class Main {
- private final String RECT_SHAPE = "rect";
- private final String OVAL_SHAPE = "oval";
- private Frame f = new Frame();
- private Button rect = new Button("Rect");
- private Button oval = new Button("Oval");
- private String shape = "";
- private MyCanvas drawArea = new MyCanvas();
- void init()
- {
- Panel p = new Panel();
- p.add(rect);
- p.add(oval);
- rect.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- // TODO Auto-generated method stub
- shape = RECT_SHAPE;
- drawArea.repaint(); //重画, 会调用paint方法。。。
- }
- });
- oval.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- // TODO Auto-generated method stub
- shape = OVAL_SHAPE;
- drawArea.repaint();
- }
- });
- f.addWindowListener(new WindowAdapter() {
- public void windowClosing(WindowEvent e)
- {
- System.exit(0);
- }
- });
- drawArea.setPreferredSize(new Dimension(250, 180));
- f.add(drawArea);
- f.add(p, BorderLayout.SOUTH);
- f.pack();
- f.setVisible(true);
- }
- public static void main(String[] args) {
- new Main().init();
- }
- class MyCanvas extends Canvas // 画布
- {
- public void paint(Graphics g) //重写paint方法
- {
- Random rand = new Random();
- if(shape.equals(RECT_SHAPE))
- {
- g.setColor(new Color(220, 100, 80));
- g.drawRect(rand.nextInt(200), rand.nextInt(120), 40, 60);
- }
- if(shape.equals(OVAL_SHAPE))
- {
- g.setColor(new Color(80, 100, 200));
- g.fillOval(rand.nextInt(200), rand.nextInt(120), 50, 40);
- }
- }
- }
- }
2. 使用image类 BufferedImage 类处理位图
画板:
- import java.awt.Canvas;
- import java.awt.Color;
- import java.awt.Dimension;
- import java.awt.Frame;
- import java.awt.Graphics;
- import java.awt.MenuItem;
- import java.awt.PopupMenu;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.awt.event.MouseAdapter;
- import java.awt.event.MouseEvent;
- import java.awt.event.MouseMotionAdapter;
- import java.awt.event.MouseMotionListener;
- import java.awt.event.WindowAdapter;
- import java.awt.event.WindowEvent;
- import java.awt.image.BufferedImage;
- public class HandDraw {
- /**
- * @param args
- */
- //画区大小
- private final int AREA_WIDTH = 500;
- private final int AREA_HEIGHT = 400;
- //鼠标坐标
- private int preX = -1;
- private int preY = -1;
- //右键惨淡
- PopupMenu pop = new PopupMenu();
- MenuItem redItem = new MenuItem("Red");
- MenuItem greenItem = new MenuItem("Green");
- MenuItem blueItem = new MenuItem("Blue");
- //Bufferedimage 对象
- BufferedImage image = new BufferedImage(AREA_WIDTH, AREA_HEIGHT,
- BufferedImage.TYPE_INT_RGB);
- Graphics g = image.getGraphics();
- private Frame f= new Frame("HandDraw");
- private String shape = "";
- private Color foreColor = new Color(255, 0, 0);
- private DrawCanvas drawArea = new DrawCanvas();
- public void init()
- {
- ActionListener menuListener = new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- // TODO Auto-generated method stub
- if( e.getActionCommand().equals("Green") )
- {
- foreColor = new Color(0, 255, 0);
- System.out.println("Green");
- }
- else if( e.getActionCommand().equals("Red") )
- {
- foreColor = new Color(255, 0, 0);
- System.out.println("Red");
- }
- else if( e.getActionCommand().equals("Blue") )
- {
- foreColor = new Color(0, 0, 255);
- System.out.println("Blue");
- }
- }
- };
- redItem.addActionListener(menuListener);
- greenItem.addActionListener(menuListener);
- blueItem.addActionListener(menuListener);
- pop.add(redItem);
- pop.add(greenItem);
- pop.add(blueItem);
- drawArea.add(pop);
- drawArea.addMouseListener(new MouseAdapter() {
- public void mouseReleased(MouseEvent e)
- {
- if(e.isPopupTrigger())
- {
- pop.show(drawArea, e.getX(), e.getY());
- }
- preX = -1;
- preY = -1;
- }
- });
- g.fillRect(0, 0, AREA_WIDTH, AREA_HEIGHT);
- drawArea.setPreferredSize(new Dimension(AREA_WIDTH, AREA_HEIGHT));
- drawArea.addMouseMotionListener(new MouseMotionAdapter() {
- public void mouseDragged(MouseEvent e)
- {
- if( preX > 0 && preY > 0 )
- {
- g.setColor(foreColor);
- g.drawLine(preX, preY, e.getX(), e.getY());
- }
- preX = e.getX();
- preY = e.getY();
- drawArea.repaint();
- }
- });
- f.addWindowListener(new WindowAdapter() {
- public void windowClosing(WindowEvent w)
- {
- System.exit(0);
- }
- });
- f.add(drawArea);
- f.pack();
- f.setVisible(true);
- }
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- new HandDraw().init();
- }
- class DrawCanvas extends Canvas
- {
- public void paint(Graphics g)
- {
- g.drawImage(image, 0, 0, null);
- }
- }
- }
3. 使用ImageIO 输入 输出位图
ImageIO有静态方法 getReaderFormatNames() 等获取 支持的读入写入的图片格式。
- public class Main {
- private final int WIDTH = 800;
- private final int HEIGHT = 600;
- BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB );
- Graphics g= image.getGraphics();
- public void zoom() throws IOException
- {
- Image srcImage = ImageIO.read(new File("/home/test/test.png")); //读取图片文件
- g.drawImage(srcImage, 0, 0, WIDTH, HEIGHT, null); //将原始图片 按固定大小绘制到image中
- ImageIO.write(image, "jpeg", new File("/home/test/testCopy.jpg")); //写入磁盘
- }
- public static void main(String[] args) throws IOException {
- // TODO Auto-generated method stub
- new Main().zoom();
- }
- }
Java -- AWT 画图,图像处理的更多相关文章
- learning java AWT 画图
import javax.swing.*; import java.awt.*; import java.util.Random; public class SimpleDraw { private ...
- Atitit.java图片图像处理attilax总结 BufferedImage extends java.awt.Image获取图像像素点image.getRGB(i, lineIndex); 图片剪辑/AtiPlatf_cms/src/com/attilax/img/imgx.javacutImage图片处理titit 判断判断一张图片是否包含另一张小图片 atitit 图片去噪算法的原理与
Atitit.java图片图像处理attilax总结 BufferedImage extends java.awt.Image 获取图像像素点 image.getRGB(i, lineIndex); ...
- java.awt.Robot
import java.awt.AWTException; import java.awt.Robot; import java.awt.event.KeyEvent; public class Te ...
- GUI编程笔记(java)02:java.awt和java.swing包的区别
1. java.awt和java.swing两者的概述 java.awt:(java的标准包) Abstract Window ToolKit (抽象窗口工具包),需要调用本地 ...
- 64位linux报错Could not initialize class java.awt.image.BufferedImage
最近碰到一个问题: 64位linux报错Could not initialize class java.awt.image.BufferedImage 在WIN平台下运行正常BufferedImage ...
- 【java图形计算器】 java awt swing组件应用
package package1; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swi ...
- class java.awt.HeadlessException : No X11 DISPLAY variable was set, but this program performed an operation which requires it.
今天上午打印回单功能发布到测试环境,报了: class java.awt.HeadlessException : No X11 DISPLAY variable was set, but this p ...
- 什么是 java.awt.headless
以下是网上的说法,我觉得简单地说就是有些功能需要硬件设备协助,比如显卡,但如果是服务器可能都没装显卡,这时就需要JDK调用自身的库文件去摸拟显卡的功能. 什么是 java.awt.headless? ...
- java awt学习笔记
最近这两天,花了些时间温习了java.awt的学习,故今日花些时间写下自己的总结吧. 1.常见的组件:Button.TextArea.Label.Checkbox.TextField Containe ...
随机推荐
- OpenGL/GLSL数据传递小记(2.x)(转)
本篇记录一下关于OpenGL程序中绑定各种GLSL变量的一些注意问题(有些是近期编写代码感受强烈的).以供参考.——ZwqXin.com 本文来源于 ZwqXin (http://www.zwqxin ...
- mysql中百万级别分页查询性能优化
前提条件: 1.表的唯一索引 2.百万级数据 SQL语句: select c.* FROM ( SELECT a.logid FROM tableA a where 1 = 1 <#if pho ...
- cxf + spring + maven 开发webservice
1.maven 配置 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://ww ...
- synchronized是什么
在再有人问你Java内存模型是什么,就把这篇文章发给他中我们曾经介绍过,Java语言为了解决并发编程中存在的原子性.可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchron ...
- Linux高并发应用类型对系统内核的优化
Linux操作系统内核参数优化 net.ipv4.tcp_max_tw_buckets = net.ipv4.ip_local_port_range = net.ipv4.tcp_tw_recycle ...
- iphone开发技术要学习的内容
一.iOS基础 1 开发环境搭建以及IOS组件.框架的概要介绍. 2 mac操作系统与iOS操作系统 3 xcode IDE开发环境的初始 二.C语言基础 1数据类型.表达式与控制流程语句 2数组.函 ...
- output的使用
如果现在让你做一个滑动的效果 然后在右侧显示滑动停止以后的数值 那么很多人会选择input 和output 来使用 <!DOCTYPE html> <html lang=" ...
- Java常用代码工具类相关
1.HttpServletRequest转换成Map public static Map<String,String> parseXML(HttpServletRequest reques ...
- Linux与本地上传下载文件
当出于安全原因,客户的服务器不允许使用windows第三方插件连接的时候,本地windows跟远程的linux服务器进行文件的上下传受到了限制,此时可以在linux服务器上安装一个工具:lrzsz.安 ...
- java 十进制转十六进制、十进制转二进制、二进制转十进制、二进制转十六进制
//10进制转16进制 Integer.toHexString(20); //10进制转2进制 Integer.toBinaryString(10); //16进制转10进制 Integer.pars ...