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 画图,图像处理的更多相关文章

  1. learning java AWT 画图

    import javax.swing.*; import java.awt.*; import java.util.Random; public class SimpleDraw { private ...

  2. 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); ...

  3. java.awt.Robot

    import java.awt.AWTException; import java.awt.Robot; import java.awt.event.KeyEvent; public class Te ...

  4. GUI编程笔记(java)02:java.awt和java.swing包的区别

    1. java.awt和java.swing两者的概述 java.awt:(java的标准包)             Abstract Window ToolKit (抽象窗口工具包),需要调用本地 ...

  5. 64位linux报错Could not initialize class java.awt.image.BufferedImage

    最近碰到一个问题: 64位linux报错Could not initialize class java.awt.image.BufferedImage 在WIN平台下运行正常BufferedImage ...

  6. 【java图形计算器】 java awt swing组件应用

    package package1; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swi ...

  7. 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 ...

  8. 什么是 java.awt.headless

    以下是网上的说法,我觉得简单地说就是有些功能需要硬件设备协助,比如显卡,但如果是服务器可能都没装显卡,这时就需要JDK调用自身的库文件去摸拟显卡的功能. 什么是 java.awt.headless? ...

  9. java awt学习笔记

    最近这两天,花了些时间温习了java.awt的学习,故今日花些时间写下自己的总结吧. 1.常见的组件:Button.TextArea.Label.Checkbox.TextField Containe ...

随机推荐

  1. python socket编程(socket)

    代码如下: server端: import sockets=socket.socket(socket.AF_INET,socket.SOCK_STREAM)host=socket.gethostnam ...

  2. java使用命令wsimport构建WebService客户端

    wsimport -d d: -keep -extension -p com.demo.client http://192.168.33.3//RECEPTIONws.ASMX?WSDL 客户端:在J ...

  3. jsp 页面导出excel时字符串数字变成科学计数法的解决方法

    web导出excel数据格式化 原文地址:http://www.cnblogs.com/myaspnet/archive/2011/05/06/2038490.html   当我们把web页面上的数据 ...

  4. 在多点环境下使用cas实现单点登陆及登出

    CAS 介绍 CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目.CAS 具有以下特 ...

  5. memcached 输入命令后无法启动

    键入命令启动memcached服务器,没有任何反应,使用telnet 127.0.0.1 11211 也是无法链接. memcached -d -m -u root -l -c -P /tmp/mem ...

  6. git 常用使用命令

    http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html http://www.open-open.com/lib/view/open14 ...

  7. Composer的Autoload源码实现2——注册与运行

    前言 上一篇 文章我们讲到了 Composer 自动加载功能的启动与初始化,经过启动与初始化,自动加载核心类对象已经获得了顶级命名空间与相应目录的映射,换句话说,如果有命名空间 'App\Consol ...

  8. Android Studio 中 Gradle 依赖的统一管理(rootProjectt)

    最近遇到Android Studio 中 Gradle 依赖的统一管理的不懂得地方,看大神的也没看懂,百度了一下,使用起来还挺方便 下面是链接,在这里我就不详细说明了, http://www.jian ...

  9. 你须知道的30个CSS选择器 »

    你也许已经掌握了id.class.后台选择器这些基本的css选择器.但这远远不是css的全部.下面向大家系统的解析css中30个最常用的选择器,包括我们最头痛的浏览器兼容性问题.掌握了它们,才能真正领 ...

  10. [Catalan数]1086 栈、3112 二叉树计数、3134 Circle

    1086 栈 2003年NOIP全国联赛普及组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 栈是计算机中 ...