1. AWT画图  Graphics类  提供绘制简单图形的方法

更新图片时用到 repaint , update , 程序不应该主动调用paint和update, 这两个方法都应该是由AWT系统负责调用,用户重写paint 即可。

示例:

  1. public class Main {
  2.  
  3. private final String RECT_SHAPE = "rect";
  4. private final String OVAL_SHAPE = "oval";
  5. private Frame f = new Frame();
  6. private Button rect = new Button("Rect");
  7. private Button oval = new Button("Oval");
  8. private String shape = "";
  9. private MyCanvas drawArea = new MyCanvas();
  10.  
  11. void init()
  12. {
  13. Panel p = new Panel();
  14. p.add(rect);
  15. p.add(oval);
  16. rect.addActionListener(new ActionListener() {
  17. @Override
  18. public void actionPerformed(ActionEvent e) {
  19. // TODO Auto-generated method stub
  20. shape = RECT_SHAPE;
  21. drawArea.repaint(); //重画, 会调用paint方法。。。
  22. }
  23. });
  24. oval.addActionListener(new ActionListener() {
  25. @Override
  26. public void actionPerformed(ActionEvent e) {
  27. // TODO Auto-generated method stub
  28. shape = OVAL_SHAPE;
  29. drawArea.repaint();
  30. }
  31. });
  32. f.addWindowListener(new WindowAdapter() {
  33. public void windowClosing(WindowEvent e)
  34. {
  35. System.exit(0);
  36. }
  37. });
  38.  
  39. drawArea.setPreferredSize(new Dimension(250, 180));
  40. f.add(drawArea);
  41. f.add(p, BorderLayout.SOUTH);
  42. f.pack();
  43. f.setVisible(true);
  44.  
  45. }
  46.  
  47. public static void main(String[] args) {
  48. new Main().init();
  49.  
  50. }
  51.  
  52. class MyCanvas extends Canvas // 画布
  53. {
  54. public void paint(Graphics g) //重写paint方法
  55. {
  56. Random rand = new Random();
  57. if(shape.equals(RECT_SHAPE))
  58. {
  59. g.setColor(new Color(220, 100, 80));
  60. g.drawRect(rand.nextInt(200), rand.nextInt(120), 40, 60);
  61. }
  62. if(shape.equals(OVAL_SHAPE))
  63. {
  64. g.setColor(new Color(80, 100, 200));
  65. g.fillOval(rand.nextInt(200), rand.nextInt(120), 50, 40);
  66. }
  67. }
  68. }
  69. }

2. 使用image类 BufferedImage 类处理位图

画板:

  1. import java.awt.Canvas;
  2. import java.awt.Color;
  3. import java.awt.Dimension;
  4. import java.awt.Frame;
  5. import java.awt.Graphics;
  6. import java.awt.MenuItem;
  7. import java.awt.PopupMenu;
  8. import java.awt.event.ActionEvent;
  9. import java.awt.event.ActionListener;
  10. import java.awt.event.MouseAdapter;
  11. import java.awt.event.MouseEvent;
  12. import java.awt.event.MouseMotionAdapter;
  13. import java.awt.event.MouseMotionListener;
  14. import java.awt.event.WindowAdapter;
  15. import java.awt.event.WindowEvent;
  16. import java.awt.image.BufferedImage;
  17.  
  18. public class HandDraw {
  19.  
  20. /**
  21. * @param args
  22. */
  23. //画区大小
  24. private final int AREA_WIDTH = 500;
  25. private final int AREA_HEIGHT = 400;
  26. //鼠标坐标
  27. private int preX = -1;
  28. private int preY = -1;
  29. //右键惨淡
  30. PopupMenu pop = new PopupMenu();
  31. MenuItem redItem = new MenuItem("Red");
  32. MenuItem greenItem = new MenuItem("Green");
  33. MenuItem blueItem = new MenuItem("Blue");
  34. //Bufferedimage 对象
  35. BufferedImage image = new BufferedImage(AREA_WIDTH, AREA_HEIGHT,
  36. BufferedImage.TYPE_INT_RGB);
  37. Graphics g = image.getGraphics();
  38. private Frame f= new Frame("HandDraw");
  39. private String shape = "";
  40. private Color foreColor = new Color(255, 0, 0);
  41. private DrawCanvas drawArea = new DrawCanvas();
  42.  
  43. public void init()
  44. {
  45. ActionListener menuListener = new ActionListener() {
  46. @Override
  47. public void actionPerformed(ActionEvent e) {
  48. // TODO Auto-generated method stub
  49. if( e.getActionCommand().equals("Green") )
  50. {
  51. foreColor = new Color(0, 255, 0);
  52. System.out.println("Green");
  53. }
  54. else if( e.getActionCommand().equals("Red") )
  55. {
  56. foreColor = new Color(255, 0, 0);
  57. System.out.println("Red");
  58. }
  59. else if( e.getActionCommand().equals("Blue") )
  60. {
  61. foreColor = new Color(0, 0, 255);
  62. System.out.println("Blue");
  63. }
  64. }
  65. };
  66. redItem.addActionListener(menuListener);
  67. greenItem.addActionListener(menuListener);
  68. blueItem.addActionListener(menuListener);
  69. pop.add(redItem);
  70. pop.add(greenItem);
  71. pop.add(blueItem);
  72. drawArea.add(pop);
  73. drawArea.addMouseListener(new MouseAdapter() {
  74. public void mouseReleased(MouseEvent e)
  75. {
  76. if(e.isPopupTrigger())
  77. {
  78. pop.show(drawArea, e.getX(), e.getY());
  79. }
  80. preX = -1;
  81. preY = -1;
  82. }
  83. });
  84.  
  85. g.fillRect(0, 0, AREA_WIDTH, AREA_HEIGHT);
  86. drawArea.setPreferredSize(new Dimension(AREA_WIDTH, AREA_HEIGHT));
  87. drawArea.addMouseMotionListener(new MouseMotionAdapter() {
  88. public void mouseDragged(MouseEvent e)
  89. {
  90. if( preX > 0 && preY > 0 )
  91. {
  92. g.setColor(foreColor);
  93. g.drawLine(preX, preY, e.getX(), e.getY());
  94. }
  95. preX = e.getX();
  96. preY = e.getY();
  97. drawArea.repaint();
  98. }
  99. });
  100.  
  101. f.addWindowListener(new WindowAdapter() {
  102. public void windowClosing(WindowEvent w)
  103. {
  104. System.exit(0);
  105. }
  106. });
  107. f.add(drawArea);
  108. f.pack();
  109. f.setVisible(true);
  110.  
  111. }
  112.  
  113. public static void main(String[] args) {
  114. // TODO Auto-generated method stub
  115. new HandDraw().init();
  116. }
  117.  
  118. class DrawCanvas extends Canvas
  119. {
  120. public void paint(Graphics g)
  121. {
  122. g.drawImage(image, 0, 0, null);
  123. }
  124. }
  125.  
  126. }

3. 使用ImageIO  输入 输出位图

ImageIO有静态方法  getReaderFormatNames() 等获取 支持的读入写入的图片格式。

  1. public class Main {
  2.  
  3. private final int WIDTH = 800;
  4. private final int HEIGHT = 600;
  5. BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB );
  6. Graphics g= image.getGraphics();
  7.  
  8. public void zoom() throws IOException
  9. {
  10. Image srcImage = ImageIO.read(new File("/home/test/test.png")); //读取图片文件
  11. g.drawImage(srcImage, 0, 0, WIDTH, HEIGHT, null); //将原始图片 按固定大小绘制到image中
  12. ImageIO.write(image, "jpeg", new File("/home/test/testCopy.jpg")); //写入磁盘
  13. }
  14.  
  15. public static void main(String[] args) throws IOException {
  16. // TODO Auto-generated method stub
  17. new Main().zoom();
  18. }
  19. }

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. OpenGL/GLSL数据传递小记(2.x)(转)

    本篇记录一下关于OpenGL程序中绑定各种GLSL变量的一些注意问题(有些是近期编写代码感受强烈的).以供参考.——ZwqXin.com 本文来源于 ZwqXin (http://www.zwqxin ...

  2. mysql中百万级别分页查询性能优化

    前提条件: 1.表的唯一索引 2.百万级数据 SQL语句: select c.* FROM ( SELECT a.logid FROM tableA a where 1 = 1 <#if pho ...

  3. cxf + spring + maven 开发webservice

    1.maven 配置 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://ww ...

  4. synchronized是什么

        在再有人问你Java内存模型是什么,就把这篇文章发给他中我们曾经介绍过,Java语言为了解决并发编程中存在的原子性.可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchron ...

  5. Linux高并发应用类型对系统内核的优化

    Linux操作系统内核参数优化 net.ipv4.tcp_max_tw_buckets = net.ipv4.ip_local_port_range = net.ipv4.tcp_tw_recycle ...

  6. iphone开发技术要学习的内容

    一.iOS基础 1 开发环境搭建以及IOS组件.框架的概要介绍. 2 mac操作系统与iOS操作系统 3 xcode IDE开发环境的初始 二.C语言基础 1数据类型.表达式与控制流程语句 2数组.函 ...

  7. output的使用

    如果现在让你做一个滑动的效果 然后在右侧显示滑动停止以后的数值 那么很多人会选择input 和output 来使用 <!DOCTYPE html> <html lang=" ...

  8. Java常用代码工具类相关

    1.HttpServletRequest转换成Map public static Map<String,String> parseXML(HttpServletRequest reques ...

  9. Linux与本地上传下载文件

    当出于安全原因,客户的服务器不允许使用windows第三方插件连接的时候,本地windows跟远程的linux服务器进行文件的上下传受到了限制,此时可以在linux服务器上安装一个工具:lrzsz.安 ...

  10. java 十进制转十六进制、十进制转二进制、二进制转十进制、二进制转十六进制

    //10进制转16进制 Integer.toHexString(20); //10进制转2进制 Integer.toBinaryString(10); //16进制转10进制 Integer.pars ...