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() {          @Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubshape = RECT_SHAPE;drawArea.repaint();  //重画, 会调用paint方法。。。}});oval.addActionListener(new ActionListener() {            @Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubshape = 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() {           @Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubif( 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 stubnew 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 stubnew Main().zoom();}
}

转载于:https://www.cnblogs.com/xj626852095/p/3648176.html

Java -- AWT 画图,图像处理相关推荐

  1. java.awt.Font.createFont 画图的时候字体不显示问题

    由于不想在服务器去安装字体 想通过项目里放置字体文件来防止项目上线字体问题导致画出来的图中文乱码,所以决定使用Font.createFont(int fontFormat, InputStream f ...

  2. java有画图的库吗_Java画图

    //利用awt.Graphics画图 //Graph用于显示所要画的图型 //Shape的子类定义可以图形 //要改变图形,可以利用Graphics类提供的方法实现 //要在同一窗口显示更多图形,通过 ...

  3. java.awt.Graphics2D 生成图片--个人章的方法

    # java.awt 画矩形踩坑 本来使用Graphics2D的drawRect()方法画图的,但是出现了下边框过粗,不得已 使用了画线的方法,四个边框,单独划线, 这里要注意坐标轴和线的宽度--高度 ...

  4. 【java】画图和监听事件的应用

    [java]画图和监听事件的应用 (1)frame.getContentPane().add(new Change()); ***用getContentPane()方法获得JFrame的内容面板,再对 ...

  5. Java学习—画图程序项目(2)

    添加水印,改变鼠标图标,简笔画功能 添加水印所用到方法 方法名 方法说明 参数 参数说明 rotate(double theta) 设置绘图的旋转弧度,让图片旋转 double theta 旋转弧度 ...

  6. 使用javax.imageio.ImageIO读取JPEG图片时出现异常java.awt.color.CMMException: General CMM error517

    目录 问题描述 背景 异常 解决 重现 紧急处理 解决方法 第一种:变更JDK版本 第二种:去掉引入的twelvemonkeys图片读取插件 问题描述 背景 由于业务需要,生产环境需要将用户上传的图片 ...

  7. Java实现画图软件(Swing)

    目标:使用Java中的GUI工具包Swing实现画图软件的创建 UI界面 首先要创建出这样的样子的界面,这就要用到JFrame类,创建一个窗体对象,然后将所有的组件(按钮.画布等)放入窗体对象中. p ...

  8. java基于OpenCv图像处理_读取_保存图片

    java基于openCv图像处理_读取_保存图片 本文使用javaCV封装后的OpenCv <dependency><groupId>org.bytedeco</grou ...

  9. java 滑块验证码 开源,Java AWT生成滑动验证码

    最近工作需要在登录时使用滑动验证码做登录校验,在生成验证码图片的时候碰到了不小的麻烦 : (. 网上能查到的做法基本上都是使用一张已存在的实际图片作为滑块的图形模板,然后按照此模板做二重循环逐像素地从 ...

最新文章

  1. 如果list中既包含字符串,又包含整数,由于非字符串类型没有lower()方法,所以列表生成式会报错:...
  2. Django modules模块
  3. 2021-06-14
  4. 【问链财经-区块链基础知识系列】 第三十课 区块链金融面临的四大挑战
  5. 活动回顾 | 8月7日Apache Flink Meetup
  6. bootstrap_bootstrap中日历范围选择插件daterangepicker的使用
  7. 使用valgrind对gperftools(tcmalloc)进行内存泄漏和越界检测
  8. 转载:ReferenceEquals, == , Equals 区别
  9. 内定抽奖小程序_excel怎么制作抽奖小程序?
  10. TS封装格式介绍及解析
  11. 解密navicate保存的数据库连接密码
  12. ZigBee-CC2530单片机 - 按键控制LED
  13. 一个简单的HTML5后台登陆界面及登录实现
  14. 01. Linux 简介
  15. ubuntu命令行使用wget下载百度云资源
  16. 考研高数——积分中值定理证明
  17. 从“1”开始学python
  18. 开心网辅助程序开发手记
  19. Python 数据结构 之 串 的链式存储结构
  20. Agent with Tangent-based Formulation and Anatomical Perception for Standard Plane Localization in 3D

热门文章

  1. 《Fast R-CNN》阅读笔记
  2. CNN 用于手写体识别 matlab 代码理解
  3. C++11 新特性整理(2)
  4. 软启动器说明书_软启动器怎么接线?一张电路图一张实物图供大家参考
  5. linux下在线新增大文件系统划分,linux - 文件系统(fdisk)
  6. 微服务链路追踪_.NET Core微服务:分布式链路追踪系统分享
  7. python的设计哲学是优雅明确简单_Python简单教程
  8. Ubuntu远程服务器创建新用户并赋予权限
  9. 35岁程序员的独家面试经历
  10. 浅谈Hybrid技术的设计与实现【转】