Graphics2D渲染
Rendering with Graphics2D
Graphics2D从java.awt.Graphics中继承而来,对提供的图形、文本和图像提供更高级的处理控制。Java 2D的渲染过程就是通过Graphics2D对象以其状态属性来控制的。
当图形对象渲染时,像线条样式和坐标状态等Grahics2D状态属性就被应用到这些图形对象上。这些和Graphics2D相联系的状态属性的集合构成了Graphics2D上下文(Graphics2D Context)。为了渲染文本、图形、图像等,你需要先创建一个Graphics2D上下文,然后调用Graphics2D的渲染方法像draw或者fill等来渲染。
2.1 接口和类
Interfaces and Classes
下面列出了和Graphics2D上下文协同工作的相关的类和接口,其中包括代表状态属性的类。大部分的类被包含在java.awt包中。
Interface Description
Composite 定义了绘制的区域上新的颜色与原有颜色之混合方式。它现有唯一实现
类为AlphaComposite.
CompositeContext 定义了被包含的优化的混合操作的环境。编程人员用它来实现通用的混合规
则。
Paint 继承于:接口Transparency
为draw或fill操作定义颜色。其实现类有Color、GradientPaint、
Texturepaint。
PaintContext 为描绘(paint)操作定义被包含的优化的环境。编程人员使用它实现通用
的描绘操作。
Stroke 产生一个被渲染图形的轮廓图形(描边)。其实现类有BasicStroke.
Class Description
AffineTransform(java.awt.geom) 表示一个2D仿射转换,完成由一个2D坐标向另一个2D坐标的线性转换。
AlphaComposite 实现接口:Composite
为图形、文本和图像实现基本的alpha混合规则。
BasicStroke 实现接口:Stroke
为图形的轮廓定义画笔样式。
Color 实现接口:Paint
为图形定义一种纯色。
GradientPaint 实现接口:Paint
为图形定义一种线性颜色渐变的填充模式。这种填充模式由P1点的C1色
渐变为P2点的C2色。
Graphics2D 继承于:Graphics
2d渲染的基础类,从java.awt.Graphics类继承而来。
TexturePaint 实现接口:Paint
为图形定义一种有质地(texture)的或图像的填充。 这种质地或图像是
从BufferedImage中产生的。
2.2渲染理念
Rendering Concepts
为能使用Java 2D API渲染一个图形,你需要先创建一个Graphics2D上下文并把图形对象传递到Graphics2D的渲染方法中。
你能够以下面的方式修改构成Graphics2D上下文的状态属性:
(1) 改变描边(stroke)的宽度;
(2) 改变描边结合点处;
(3) 设置剪辑路径,把渲染限制在限定的区域内;
(4) 对图形对象进行移动、旋转、缩放和切变等渲染;
(5) 定义填充图形的颜色及模式;
(6) 指定应该参与组合的图形的数量。
Graphics2D为增强和改变状态属性,在图形上下文中定义了几种方法。大多方法产生一个能代表特定属性的对象,像Paint和Stroke对象等。
Graphics2D上下文保留了对这些属性对象的引用(references):它们并不是这些对象的克隆。如果你想修改Graphics2D上下文中某个属性对象,你需要调用恰当的Set方法来改变这些上下文。在渲染期间改变一个属性可能会引起难以预料和不稳定的行为。
2.2.1渲染过程
Rendering Process
当图形对象被渲染时,它的几何、图形和属性信息将会被组合起来重新计算。这些显示器上的像素值肯定会发生改变。
图形的渲染过程可分为四步:
(1) 如果图形被描边。Stroke属性将在Graphics2D上下文中产生一个包含描边路径的新的图形对象;
(2) 图形的路径图标通过Graphics2D上下文从用户空间向设备空间坐标转变;
(3) 使用clip属性,图形的路径将被剪辑;
(4) 剩下的图形——如果存在的话,会被Graphics2D上下文中的Paint和Composite等属性填充。
文本渲染和图形渲染类似,因为文本是作为单独的字形进行渲染而每个字形又是一个Shape对象。它们唯一不同在于Java 2D API必须决定使用什么字体(Font)进行渲染,并在渲染之前获得该字体的合适的字形。
图像的处理就略有不同了,转换和剪辑操作只在图像的限定范围内进行。颜色信息来自于图像自身,当图像像素在当前渲染界面上混合时,它的alpha通道将和当前的Composite属性结合起来使用。
2.2.2 控制渲染质量
Controlling Rendering Quality
Java 2D API让你自己决定图像对象是尽量的渲染还是尽可能高质量的渲染。你的选择被指定为示意(hint),通过Graphics2D上下方的RenderingHints属性来指定。但并不是所有平台都支持修改渲染模式,所以指定的渲染示意并不能保证会被运用。
RenderingHints类支持以下的渲染示意类型:
(1) Alpha interpolation --可以被设置为default、quality或者speed;
(2) Antialiasing --可设置为default、on或off;
(3) Color Rendering --可设置为default、quality或speed;
(4) Dithering --可设置为default、disable或enable;
(5) Fractional Metrics --可设置为default、on或off;
(6) Interpolation --可设置为nearest-neighbor、bilinear或bicubic;
(7) Rendering --可设置为default、quality或speed;
(8) Text antiliasing --可设置为default、on或off。
通过调用setRenderingHints,你可以设置或更改Graphics2D中的RenderingHints属性。如果示意设置为默认,那么系统将按该平台上的默认方式来渲染。
Antiliasing
当图形基元(primitive)在光栅图形显示设备上渲染时,由于图形和空白区域间的混淆,它们的边缘将呈现为锯齿状。弧线和对角线更容易出现锯齿现象,因为它们更热衷于附近出
Graphics2D渲染
最新推荐文章于 2022-06-24 09:17:22 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)