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

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

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();

}

posted @

2019-03-25 20:38

yangyuxiaozi

阅读(1996)

评论(0)

收藏

举报

相关推荐

《问道》坐骑战力加成深度解析
365平台是做什么的

《问道》坐骑战力加成深度解析

📅 06-27 👁️ 1753
胯宽屁股大不用怕!掌握这5个穿搭技巧,就算身材走形也没关系
Elsevier Journal Catalog: Browse Peer
365bet手机在线投注

Elsevier Journal Catalog: Browse Peer

📅 08-26 👁️ 9823
笑笑确认离开斗鱼!原因是不想背锅?
bet体育365官网正规平台

笑笑确认离开斗鱼!原因是不想背锅?

📅 08-19 👁️ 6812
盘点英雄联盟周年限定皮肤
bet体育365官网正规平台

盘点英雄联盟周年限定皮肤

📅 07-08 👁️ 9539
魔兽世界t9套哪里刷
365bet手机在线投注

魔兽世界t9套哪里刷

📅 07-21 👁️ 9925