Java Graphics2D 使用

Graphics2D 呈现属性的默认值有:
Paint
Component 的颜色。
Font
Component 的 Font。
Stroke
线宽为 1 的方形画笔,没有虚线、斜角线段接合和方形端点。
Transform
用于 Component 的 GraphicsConfiguration 的 getDefaultTransform。
Composite
AlphaComposite.SRC_OVER规则。
Clip
不呈现 Clip,输出局限于 Component。
Paint
新的paint可以同时作用在边线和填充上了。Graphics2D类可以用setPaint()和getPaint()方法配制paint属性。
Java 2D类库中有三个类你应该感到熟悉:
  1. java.awt.Color::Java 2D使用同样的常量。因为Color类实现了java.awt.Paint接口,所有的Color对象都是Paint对象。
  2. java.awt.GradientPaint:这个类用颜色渐变填充一个区域。如果在用户空间指定了 Point P1 的 Color 为 C1,Point P2 的 Color 为 C2,则 P1、P2 连接线上的 Color 是逐渐地从 C1 变化到 C2 的。任何不在 P1、P2 延长线上的点 P 都具有点 P' 的颜色,P' 是 P1、P2 延长线上点 P 的垂直投影。P1、P2 段以外的延长线上的点可以按以下两种方式之一进行着色。
  3. java.awt.TexturePaint:这个类平铺一个图像来填充图形。构造函数接收一个 java.awt.image.BufferedImage和一个Rectangle2D,把图像影射到矩形里,然后平铺矩形。
Stroke
描边决定着图形或文字的轮廓。通过setStroke(Srroke s)方法为 Graphics2D 上下文设置 Stroke 。
BasicStroke 类定义针对图形图元轮廓呈现属性的一个基本集合,这些图元使用 Graphics2D 对象呈现,而该对象的 Stroke 属性设置为此 BasicStroke。由 BasicStroke 定义的呈现属性描述了用画笔沿 Shape 的轮廓绘制的某个标记的形状,以及应用在 Shape 路径线段的末端和连接处的装饰。这些呈现属性包括:
width
画笔的宽度,是垂直于画笔轨迹的测量值。
end caps
在未封闭子路径和虚线线段的末端应用的一些装饰。如果子路径没有 CLOSE 段,则在同一点上开始和结束的子路径仍被认为是未封闭的。CLOSE 段的三个不同的装饰是:
CAP_BUTT(0):无装饰地结束未封闭的子路径和虚线线段。
CAP_ROUND(1):使用半径等于画笔宽度一半的圆形装饰结束未封闭的子路径和虚线线段。
CAP_SQUARE(2):使用正方形结束未封闭的子路径和虚线线段,正方形越过线段端点,并延长等于线条宽度一半的距离。
line joins
在两个路径线段的交汇处,以及使用 SEG_CLOSE 封闭的子路径端点的交汇处应用的装饰。三个不同的装饰是:
JOIN_BEVEL(2):通过直线连接宽体轮廓的外角,将路径线段连接在一起。
JOIN_MITER(0):扩展路径线段的外边缘,直到它们连接在一起。
JOIN_ROUND(1):通过舍去半径为线长的一半的圆角,将路径线段连接在一起。
miter limit
对剪裁具有 JOIN_MITER 装饰的线接合点的限制。当斜接长度与笔划宽度的比大于 miterlimit 值时,需要剪裁线接合点。斜接长度是斜接的对角线长度,即交汇处的内棱角和外棱角之间的距离。两条线段形成的角度越小,斜接长度就越长,交汇处的角度就越尖锐。默认 miterlimit 值为 10.0f,它会使所有小于 11 度的角都被剪裁。剪裁斜接会使线接合点的装饰变成斜角。
dash attributes
关于如何通过在不透明和透明部分之间交替形成一个虚线模式的定义。
下面是BasicStroke的构造函数:
  1. BasicStroke():这个构造建立一个1单位宽的描边。端点样式是默认的CAP_SQUARE,默认接头样式是默认的 JOIN_MITER。
  2. BasicStroke(float penWidth): 指定线宽,端点样式使用默认的CAP_SQUARE,默认接头样式使用默认的 JOIN_MITER。
  3. BasicStroke(float penWidth, int capStyle, int joinStyle): 指定线宽,端点样式和接头样式。
  4. BasicStroke(float penWidth, int capStyle, int joinStyle, float miterLimit):基本同上,但可以设置拼接连接的延长度,默认是10。
  5. BasicStroke(float penWidth, int capStyle, int joinStyle, float miterLimit, float[] dashPattern, float dashOffset):这个构造可以通过一个表明[透明,不透明的]数组,建立点线轮廓。offset是点线的起始位置,一般是0,0。
Font
所有的文本都使用能表现文字的样式图形渲染。当前的字体决定了字体的形状。使用继承自 java.awt.Graphics的getFont()方法和setFont()方法来操纵字体。字体设置很简单,这里就不介绍了。

Rendering Hints
Rendering hints是Graphics2D对象描绘基本类型时使用的各种描绘方法。如先前使用的抗锯齿hint。这些hints被封装在 java.awt.RenderingHints类中。由于使用Java 2D API会比旧的AWT涉及更多的计算,设计师默认禁止了一部分特性以提高性能。最常用的设置是抗锯齿,如下:
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);



下面看一个例子,结果如下:

主要代码:
public void paint(Graphics glod) {
		Graphics2D g = (Graphics2D) glod;
		BasicStroke stroke1 = new BasicStroke(4.0F, BasicStroke.CAP_BUTT,
				BasicStroke.JOIN_ROUND);
		BasicStroke stroke2 = new BasicStroke(3.0F, BasicStroke.CAP_ROUND,
				BasicStroke.JOIN_BEVEL);
		BasicStroke stroke3 = new BasicStroke(2.0F, BasicStroke.CAP_SQUARE,
				BasicStroke.JOIN_MITER, 10.0F, new float[] { 15.0F, 10.0F },
				0.0F);
		Stroke s = g.getStroke();

		g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
				RenderingHints.VALUE_ANTIALIAS_ON);

		g.setColor(Color.BLUE);
		g.setStroke(stroke1);
		g.drawLine(10, 10, 400, 10);

		g.setPaint(new GradientPaint(10.0F, 20.0F, Color.CYAN, 210.0F, 120.0F,
				Color.GRAY));
		g.setStroke(stroke2);
		g.drawRect(10, 20, 200, 100);
		
		g.setColor(Color.GREEN);
		g.setStroke(stroke3);
		g.drawArc(230, 20, 100, 100, 0, 360);

		g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
				RenderingHints.VALUE_ANTIALIAS_OFF);
		g.setStroke(s);
	}

会用上面的几个属性,基本就可以了,下图为之前写的一个例子:


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java Graphics2DJava 2D API 中的一部分,它提供了一种绘制图形、文本和显式图像的方式。Graphics2D 类是抽象类 Graphics 的子类,它可以用于创建具有高质量 2D 图形的应用程序。 Java Graphics2D 可以用于创建图形用户界面 (GUI) 和游戏,也可以用于创建绘画等应用程序。它提供了许多绘制方法,例如绘制线条、矩形、圆形、椭圆、弧形、文本和图像等。此外,它还提供了一些高级图形处理方法,例如透明度、渐变、阴影效果、剪切、旋转和缩放等。 要使用 Graphics2D,您需要创建一个 Graphics2D 对象并将其转换为 Graphics2D 类型。然后,您可以使用 Graphics2D 对象的方法来绘制您想要的图形和文本。例如,以下是如何创建一个 Graphics2D 对象并绘制一个矩形的示例代码: ``` import java.awt.*; import javax.swing.*; public class Graphics2DExample extends JPanel { public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; g2d.drawRect(50, 50, 100, 100); } public static void main(String[] args) { JFrame frame = new JFrame("Graphics2D Example"); frame.add(new Graphics2DExample()); frame.setSize(300, 300); frame.setVisible(true); } } ``` 此代码创建一个 Graphics2DExample 类,该类扩展了 JPanel,并且重写了 paintComponent 方法来绘制一个矩形。在 paintComponent 方法中,它先调用了父类的 paintComponent 方法,然后将 Graphics 对象转换为 Graphics2D 对象,并使用 Graphics2D 对象的 drawRect 方法来绘制一个矩形。最后,在 main 方法中创建一个 JFrame 并将 Graphics2DExample 对象添加到其中。 这只是一个简单的示例,Java Graphics2D 还提供了许多其他功能和方法,如需更多信息,请查看 Java 文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值