Graphics2D渲染

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)在光栅图形显示设备上渲染时,由于图形和空白区域间的混淆,它们的边缘将呈现为锯齿状。弧线和对角线更容易出现锯齿现象,因为它们更热

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值