Java绘图-第19章

Java绘图-第19章

1.Java绘图类

1.1Graphics类

Graphics类是用于绘制图形的抽象类,它是java.awt包中的一部分。Graphics类提供了各种方法,可以在图形上绘制各种形状、文本和图像。这些方法包括画线、画矩形、画椭圆、画弧、绘制图像等。

1.2Graphics2D类

Graphics2D类是java.awt包中的一个子类,它扩展了Graphics类,提供了更多的绘图功能和灵活性。Graphics2D类支持更高级的绘图操作,包括渐变、缩放、旋转等。它是Java 2D API 的一部分,用于在二维平面上执行各种图形操作。

以下是一些Graphics2D类中常用的方法:

  1. 设置颜色:

    void setColor(Color c)
    
  2. 设置渐变:

    void setPaint(GradientPaint paint)
    
  3. 设置线条宽度:

    void setStroke(Stroke s)
    
  4. 绘制直线:

    void drawLine(int x1, int y1, int x2, int y2)
    
  5. 绘制形状:

    void draw(Shape s)
    
  6. 填充形状:

    void fill(Shape s)
    
  7. 设置字体:

    void setFont(Font font)
    
  8. 绘制字符串:

    void drawString(String str, int x, int y)
    
  9. 绘制图像:

    boolean drawImage(Image img, int x, int y, ImageObserver observer)
    
  10. 旋转:

    void rotate(double theta, double x, double y)
    
  11. 缩放:

    void scale(double sx, double sy)
    
  12. 平移:

    void translate(double tx, double ty)
    

使用Graphics2D类的示例可以嵌入在paintComponent方法中,例如:

import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;import javax.swing.JPanel;public class MyPanel extends JPanel {@Overrideprotected void paintComponent(Graphics g) {super.paintComponent(g);Graphics2D g2d = (Graphics2D) g;// 设置抗锯齿g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);// 绘制直线g2d.drawLine(10, 10, 100, 100);// 设置颜色g2d.setColor(Color.BLUE);// 绘制矩形g2d.drawRect(120, 10, 80, 50);// 设置渐变GradientPaint gradient = new GradientPaint(200, 10, Color.RED, 300, 60, Color.YELLOW);g2d.setPaint(gradient);// 填充椭圆g2d.fillOval(220, 10, 100, 60);}
}

在这个示例中,我们创建了一个Graphics2D对象,启用了抗锯齿,并使用了一些Graphics2D的方法来绘制直线、矩形和填充椭圆。这只是Graphics2D类的一小部分功能,你可以根据需要探索更多的方法来满足你的绘图需求。

例题1-7

1.绘制奥运五环在这里插入图片描述

2.绘制实心与空心的集合图形

在这里插入图片描述

3.在窗体中显示图片

在这里插入图片描述

4.通过滑动条改变图片大小

在这里插入图片描述

5.翻转图片

在这里插入图片描述

6.让图片围绕左上角点旋转

在这里插入图片描述

7.让照片变成向左倾斜的平行四边形形状

在这里插入图片描述

8.绘制文字钟表
在这里插入图片描述

1-7例题代码汇总
package nineteen;import javax.swing.*;
import java.awt.*;
import java.awt.Graphics;public class DrawCircle extends JFrame {private final int OVAL_WIDTH=80;private final int OVAL_HEIGHT=80;public DrawCircle(){initialize();}private void initialize(){setSize(300,200);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setContentPane(new DrawPanel());setTitle("绘图实例1");}class DrawPanel extends JPanel{public void paint(Graphics g){g.drawOval(10,10,OVAL_WIDTH,OVAL_HEIGHT);g.drawOval(80,10,OVAL_WIDTH,OVAL_HEIGHT);g.drawOval(150,10,OVAL_WIDTH,OVAL_HEIGHT);g.drawOval(50,70,OVAL_WIDTH,OVAL_HEIGHT);g.drawOval(120,70,OVAL_WIDTH,OVAL_HEIGHT);}}public static void main(String[] args){new DrawCircle().setVisible(true);}
}
package nineteen;import javax.swing.*;
import java.awt.*;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;public class DrawFrame extends JFrame {public DrawFrame(){setTitle("绘图实例2");setSize(300,200);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);add(new CanvasPanel());}class CanvasPanel extends JPanel{public void paint(Graphics g){Graphics2D g2 = (Graphics2D) g;Shape[] shapes = new Shape[4];shapes[0] = new Ellipse2D.Double(5,5,100,100);shapes[1] = new Rectangle2D.Double(110,5,100,100);shapes[2] = new Rectangle2D.Double(15,15,80,80);shapes[3] = new Ellipse2D.Double(120,15,80,80);for(Shape shape:shapes){Rectangle2D bounds = shape.getBounds2D();if(bounds.getWidth()==80) {g2.fill(shape);g.setColor(Color.BLUE);}else g2.draw(shape);}}}public static void main(String[] args){new DrawFrame().setVisible(true);}
}
package nineteen;import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.io.IOException;public class DrawImage extends JFrame{Image img;
public DrawImage(){try{img= ImageIO.read(new File("src/20220909223037.png"));}catch(IOException e){e.printStackTrace();}setSize(440,300);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);add(new CanvasPanel());setTitle("繪製圖片");
}
class CanvasPanel extends JPanel{public void paint(Graphics g){Graphics2D g2 = (Graphics2D) g;g2.drawImage(img,0,0,this);}
}
public static void main(String[] args){new DrawImage().setVisible(true);
}
}
package nineteen;import java.awt.*;
import java.io.*;
import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.event.*;public class ImageZoom extends JFrame {Image img;private int imgWidth,imgHeight;private JSlider jSlider;public ImageZoom() {try {img=ImageIO.read(new File("src/20220909223037.png"));//读取图片文件}catch (IOException e) {e.printStackTrace();}CanvasPanel canvas =new CanvasPanel();jSlider = new JSlider();jSlider.setMaximum(1000);jSlider.setValue(100);jSlider.setMaximum(1);jSlider.addChangeListener(new ChangeListener(){public void stateChanged(ChangeEvent e) {canvas.repaint();}});JPanel center =new JPanel();center.setLayout(new BorderLayout());center.add(jSlider,BorderLayout.SOUTH);center.add(canvas,BorderLayout.CENTER);setContentPane(center);setBounds(100,100,800,600);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setTitle("绘制图片");}class CanvasPanel extends JPanel{public void paint(Graphics g) {int newW=0,newH =0;imgWidth =img.getWidth(this);imgHeight =img.getHeight(this);float value =jSlider.getValue();newW =(int)(imgWidth*value/10);newH =(int)(imgHeight*value/10);g.drawImage(img, 0, 0, newW, newH, this );}	}public static void main(String[] args) {new ImageZoom().setVisible(true);}}
package nineteen;import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;import javax.imageio.*;
public class PartImage extends JFrame {private Image img;private int dx1,dy1,dx2,dy2;private int sx1,sy1,sx2,sy2;private int width=1920,height =1080;private JButton vBtn=null;private JButton hBtn=null;private CanvasPanel canvasPanel =null;public PartImage() {try {img=ImageIO.read(new File("src/20220909223037.png"));//读取图片文件}catch (IOException e) {e.printStackTrace();}dx2 =sx2 =width;dy2 =sy2= height;vBtn =new JButton("垂直");hBtn =new JButton("水平");JPanel bottom=new JPanel();bottom.add(hBtn);bottom.add(vBtn);Container c=getContentPane();c.add(bottom,BorderLayout.SOUTH);canvasPanel =new CanvasPanel();c.add(canvasPanel,BorderLayout.CENTER);addListener();setBounds(400,400,600,560);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setTitle("图片翻转");}private void addListener() {vBtn.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {sy1=Math.abs(sy1-height);sy2=Math.abs(sy2-height);canvasPanel.repaint();}});hBtn.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {sx1=Math.abs(sx1-width);sx2=Math.abs(sx2-width);canvasPanel.repaint();}});}class CanvasPanel extends JPanel{public void paint(Graphics g) {g.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, this);//绘制指定大小}}public static void main(String[] args) {new PartImage().setVisible(true);}}
package nineteen;import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.io.IOException;public class RotateImage extends JFrame {private Image img;public RotateImage(){try{img = ImageIO.read(new File("src/20220909223037.png"));}catch (IOException e){e.printStackTrace();}setBounds(100,100,400,350);add(new  CanvasPanel());setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setTitle("图片旋转");}class CanvasPanel extends JPanel{public void paint(Graphics g){Graphics2D g2 = (Graphics2D) g;g2.rotate(Math.toRadians(5));g2.drawImage(img,70,10,300,200,this);g2.rotate(Math.toRadians(5));g2.drawImage(img,70,10,300,200,this);g2.rotate(Math.toRadians(5));g2.drawImage(img,70,10,300,200,this);}}public static void main(String[] args){new RotateImage().setVisible(true);}
}
package nineteen;import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.io.IOException;public class TiltImage extends JFrame {private Image img;public TiltImage(){try{img = ImageIO.read(new File("src/20220909223037.png"));}catch(IOException e){e.printStackTrace();}setBounds(100,100,400,300);add(new CanvasPanel());setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setTitle("图片倾斜");}class CanvasPanel extends JPanel{public void paint(Graphics g){Graphics2D g2 = (Graphics2D)g;g2.shear(0.3,0);g2.drawImage(img,0,0,300,200,this);}
}
public static void main(String[] args){new TiltImage().setVisible(true);
}
}
package nineteen;import javax.swing.*;
import java.awt.*;
import java.awt.geom.Rectangle2D;
import java.util.Date;public class DrawString extends JFrame {public DrawString(){setSize(230,140);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);add(new CanvasPanel());setTitle("绘图文本");}class CanvasPanel extends JPanel{public void paint(Graphics g){Graphics2D g2=(Graphics2D) g;Rectangle2D rect = new Rectangle2D.Double(10,10,200,80);Font font= new Font("宋体",Font.BOLD,16);Date date = new Date();g2.setColor(Color.CYAN);g2.fill(rect);g2.setColor(Color.BLUE);g2.setFont(font);g2.drawString(String.format("%tr",date),50,60);}}public static void main(String[] args){new DrawString().setVisible(true);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/179353.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【差分演化算法相关文献总结】

差分演化算法相关文献总结 前言概述文献综述总结 前言 本人作为一名从事了三年演化算法研究的菜鸡研究生,其中大部分时间都在专注于差分演化算法(Differential Evolution, DE)的相关研究。现如今已经毕业,回顾往昔,经过…

11月15日星期三今日早报简报微语报早读

1、2023胡润女企业家榜出炉:郭得胜夫人邝肖卿首次成为中国女首富,龙湖吴亚军蝉联中国白手起家女首富; 2、叶剑英元帅夫人吴博逝世,享年106岁; 3、外交部:所谓“联合国军”是冷战产物,于法无据…

cudnn安装

安装地址 cudnn安装地址:https://developer.nvidia.com/rdp/cudnn-download 安装 选择windows版本的下载,我这里选择的这个: 下载之后解压即可。 后续 后续:第一步 把cudnn的bin,include,lib三个文件…

高并发架构设计(三大利器:缓存、限流和降级)

引言 高并发背景 互联网行业迅速发展,用户量剧增,系统面临巨大的并发请求压力。 软件系统有三个追求:高性能、高并发、高可用,俗称三高。三者既有区别也有联系,门门道道很多,全面讨论需要三天三夜&#…

vue3项目常用功能分享

Vue3常用功能分享 本文主要分享一下在使用vue3开发项目时的一些常用功能 一、自动注册全局组件 自动注册components目录下所有vue组件并以组件的文件名为组件的名称 // components/index.tsimport { type App, defineAsyncComponent } from vue const components Object.e…

十九章总结

Graphics类 Graphics类是所有图形上下文的抽象基类,封装了Java支持的基本绘图操作所需的状态信息,主要包括颜色、字体、画笔 Graphics2D类 Graphics2D类继承Graphics类实现功能更加强大的绘图操作集合 绘制图形 在项目中创建一个类,是该…

论文阅读:YOLOV: Making Still Image Object Detectors Great at Video Object Detection

发表时间:2023年3月5日 论文地址:https://arxiv.org/abs/2208.09686 项目地址:https://github.com/YuHengsss/YOLOV 视频物体检测(VID)具有挑战性,因为物体外观的高度变化以及一些帧的不同恶化。有利的信息…

天马行空的超级炫酷旋转图片-前端

一、实现代码&#xff08;html部分&#xff09; <!DOCTYPE html> <html> <head lang"en"><meta charset"UTF-8"><title>3D旋转</title><style type"text/css">*{padding: 0;margin: 0;}body,html{he…

OpenHarmony应用开发入门教程(一、开篇)

前言 华为正式宣布2024年发布的华为鸿蒙OS Next版将不再兼容安卓系统。这一重大改变&#xff0c;预示着华为鸿蒙OS即将进入一个全新的阶段。 都说科技无国界&#xff0c;这是骗人的鬼话。谷歌的安卓12.0系统早已发布&#xff0c;但是自从受到美影响&#xff0c;谷歌就拒绝再向…

飞天使-django之数据库简介

文章目录 增删改查解决数据库不能存储中文问题创建表数据类型表的基本操作主键唯一键 unique外键实战 增删改查 四个常用的语句查询 : insert delete update select insert into student(Sno,name) values(95001,"张三") delete from student where name张三 upda…

C++初阶(十一)STL简介及string类初讲

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、什么是STL二、STL的版本三、STL的六大组件四、STL的重要性五、如何学习STL六、STL的缺陷七…

Java智慧工地云SaaS源码,AI服务器、智能硬件

智慧工地智能硬件 一、自动喷淋控制 当扬尘监测值超过在智慧工地系统中设定的闽值后自动喷淋控制系统通过接收系统发出的开关指令&#xff0c;实现自动、及时喷淋降尘&#xff0c;同时系统可设置自动喷淋时间段&#xff0c;每天定时喷淋&#xff0c;避免环境污染。 二、智能电…