zoukankan      html  css  js  c++  java
  • 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();
    	}	
    }


     

  • 相关阅读:
    【BZOJ】2453: 维护队列【BZOJ】2120: 数颜色 二分+分块(暴力能A)
    【转】使用json-lib进行Java和JSON之间的转换
    【转】MySQL索引和查询优化
    【转】SQL常用的语句和函数
    【转】MySQL日期时间函数大全
    VMare中安装“功能增强工具”,实现CentOS5.5与win7host共享文件夹的创建
    MyEclipse中消除frame引起的“the file XXX can not be found.Please check the location and try again.”的错误
    由于SSH配置文件的不匹配,导致的Permission denied (publickey)及其解决方法。
    复选框的多选获取值
    echart环形图制作及出现的一些问题总结
  • 原文地址:https://www.cnblogs.com/xj626852095/p/3648176.html
Copyright © 2011-2022 走看看