• java画图基本操作-线/折线,圆弧/扇形,椭圆,文本


    /**
         * 画线/折线
         */
        private static void drawLine(Graphics g) {
    
            Graphics2D g2d = (Graphics2D) g.create();
    
            // 抗锯齿
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            // 设置画笔颜色
            g2d.setColor(Color.RED);
    
            // 1. 两点绘制线段: 点(20, 50), 点(200, 50)
            g2d.drawLine(50, 50, 200, 50);
    
            // 2. 多点绘制折线: 点(50, 100), 点(100, 130), 点(150, 70), 点(200, 100)
            int[] xPoints = new int[] { 50, 100, 150, 200 };
            int[] yPoints = new int[] { 100, 120, 80, 100 };
            int nPoints = 4;
            g2d.drawPolyline(xPoints, yPoints, nPoints);
    
            // 3. 两点绘制线段(设置线宽为5px): 点(50, 150), 点(200, 150)
            BasicStroke bs1 = new BasicStroke(5);       // 笔画的轮廓(画笔宽度/线宽为5px)
            g2d.setStroke(bs1);
            g2d.drawLine(50, 150, 200, 150);
    
            // 4. 绘制虚线: 将虚线分为若干段( 实线段 和 空白段 都认为是一段), 实线段 和 空白段 交替绘制,
            //             绘制的每一段(包括 实线段 和 空白段)的 长度 从 dash 虚线模式数组中取值(从首
            //             元素开始循环取值), 下面数组即表示每段长度分别为: 5px, 10px, 5px, 10px, ...
            float[] dash = new float[] { 5, 10 };
            BasicStroke bs2 = new BasicStroke(
                    1,                      // 画笔宽度/线宽
                    BasicStroke.CAP_SQUARE,
                    BasicStroke.JOIN_MITER,
                    10.0f,
                    dash,                   // 虚线模式数组
                    0.0f
            );
            g2d.setStroke(bs2);
            g2d.drawLine(50, 200, 200, 200);
    
            // 自己创建的副本用完要销毁掉
            g2d.dispose();
        }
    
        /**
         * 画矩形/多边形
         */
        private static void drawRect(Graphics g) {
    
            Graphics2D g2d = (Graphics2D) g.create();
    
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            g2d.setColor(Color.GRAY);
    
            // 1. 绘制一个矩形: 起点(30, 20), 宽80, 高100
            g2d.drawRect(30, 20, 80, 100);
    
            // 2. 填充一个矩形
            g2d.fillRect(140, 20, 80, 100);
    
            // 3. 绘制一个圆角矩形: 起点(30, 150), 宽80, 高100, 圆角宽30, 圆角高30
            g2d.drawRoundRect(30, 150, 80, 100, 30, 30);
    
            // 4. 绘制一个多边形(收尾相连): 点(140, 150), 点(180, 250), 点(220, 200)
            int[] xPoints = new int[] { 140, 180, 220};
            int[] yPoints = new int[] { 150,  250, 200};
            int nPoints = 3;
            g2d.drawPolygon(xPoints, yPoints, nPoints);
    
            g2d.dispose();
        }
    
        /**
         * 画圆弧/扇形
         */
        private static void drawArc(Graphics g) {
    
            Graphics2D g2d = (Graphics2D) g.create();
    
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            g2d.setColor(Color.RED);
    
            // 1. 绘制一条圆弧: 椭圆的外切矩形 左上角坐标为(0, 0), 宽100, 高100,
            //                弧的开始角度为0度, 需要绘制的角度数为-90度,
            //                椭圆右边水平线为0度, 逆时针为正角度, 顺时针为负角度
            g2d.drawArc(0, 0, 100, 100, 0, -90);
    
            // 2. 绘制一个圆: 圆的外切矩形 左上角坐标为(120, 20), 宽高为100
            g2d.drawArc(120, 20, 100, 100, 0, 360);
    
            g2d.setColor(Color.GRAY);
    
            // 3. 填充一个扇形
            g2d.fillArc(80, 150, 100, 100, 90, 270);
    
            g2d.dispose();
        }
    
        /**
         * 画椭圆(实际上通过绘制360度的圆弧/扇形也能达到绘制圆/椭圆的效果)
         */
        private static void drawOval(Graphics g) {
    
            Graphics2D g2d = (Graphics2D) g.create();
    
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            g2d.setColor(Color.RED);
    
            // 1. 绘制一个圆: 圆的外切矩形 左上角坐标为(0, 0), 宽高为100
            g2d.drawOval(0, 0, 100, 100);
    
            g2d.setColor(Color.GRAY);
    
            // 2. 填充一个椭圆
            g2d.fillOval(120, 100, 100, 150);
    
            g2d.dispose();
        }
    
        /**
         * 画文字
         */
        private static void drawText(BufferedImage bufImage, String text, float x, float y) {
    
            Graphics g = bufImage.getGraphics();
            Graphics2D g2d = (Graphics2D) g.create();
    
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            g2d.setColor(Color.RED);
    
            // 设置字体样式, null 表示使用默认字体, Font.PLAIN 为普通样式, 大小为 50px
            g2d.setFont(new Font(null, Font.PLAIN, 50));
    
            // 绘制文本, 其中坐标参数指的是文本绘制后的 左下角 的位置
            // 首次绘制需要初始化字体, 可能需要较耗时
            g2d.drawString(text, x, y);
    
            g2d.dispose();
        }
  • 相关阅读:
    基于阿里云GPU云服务器的AIACC助力UC搜索业务性能提效380%,每年节省数千万成本
    如何在 ACK 中使用 MSE Ingress
    面向对象分析与设计的底层逻辑
    当 AI 邂逅绘画艺术,能迸发出怎样的火花?
    是什么让一段20行代码的性能提升了10倍
    我,PolarDB云原生数据库,5年来实现这些重磅技术创新
    一图看懂天河文链如何实现云原生架构升级
    首次全面解析云原生成熟度模型:解决企业「诊断难、规划难、选型难」问题
    C++快速初始化vector
    Grid布局指定列数时,行高自适应为元素高度
  • 原文地址:https://www.cnblogs.com/yangyuxiaozi/p/10596480.html
Copyright © 2020-2023  润新知