JAVA2DGraphics2D
java.awt
类 Graphics2D
/doc/641005070.html
ng.Object
java.awt.Graphics
java.awt.Graphics2D
public abstract class Graphics2D
extends Graphics
此 Graphics2D 类扩展Graphics类,以提供对⼏何形状、坐标转换、颜⾊管理和⽂本布局更为复杂的控制。它是⽤于在
Java(tm) 平台上呈现⼆维形状、⽂本黑板的英语怎么写
和图像的基础类。
坐标空间
所有传递到 Graphics2D 对象的坐标都在⼀个与设备⽆关并且名为⽤户空间的坐标系中指定,⽤户空间由应⽤程序使⽤。Graphics2D 对象包含⼀个AffineTransform对象作为其呈现状态的⼀部分,后者定义了如何将坐标从⽤户空间转换到设备空间中与设备有关的坐标。
设备空间中的坐标通常是指单个设备像素,并根据这些像素之间⽆限⼩的间距对齐。某些 Graphics2D 对象可⽤于捕获对存储器的呈现操作并存⼊图形元⽂件,以后可在未知物理分辨率的具体设备上重放。由于在捕获呈现操作时分辨率可能未知,所以Graphics2D Transform 的设置可将⽤户坐标转换为虚拟设备空间,该设备空间与⽬标设备的预期分辨率接近。如果估计值不正确,则在重放心理海报
时可能需要进⼀步转换。
某些由呈现属性对象执⾏的操作发⽣在设备空间中,但所有 Graphics2D ⽅法都采⽤⽤户空间坐标。
每个 Graphics2D 对象都与⼀个定义呈现位置的⽬标关联。GraphicsConfiguration对象定义呈现⽬标的特征,如像素格式和分辨率。在Graphics2D 对象的整个⽣命周期中都使⽤相同的呈现⽬标。
创建 Graphics2D 对象时,GraphicsConfiguration 将为 Graphics2D 的⽬标(Component或Image)指定默认转换,此默认转换将⽤户空间坐标系映射到屏幕和打印机设备坐标,使原点映射到设备⽬标区
域的左上⾓,并将 X 坐标轴向右⽅延伸,将 Y 坐标轴向下⽅延伸。对于接近 72 dpi 的设备(例如屏幕设备),默认转换的缩放⽐例设置为 1:1。对于⾼分辨率设备(例如打印机),默认转换
的缩放⽐例设置为每平⽅英⼨⼤约 72 个⽤户空间坐标。对于图像缓冲区,默认转换为 Identity 转换。
呈现过程
呈现过程可以分为四个阶段,这四个阶段由 Graphics2D 呈现属性控制。呈现器可以优化当中的许多步骤:可以缓存结果以⽤于未来调⽤;可以将多个虚拟步骤合成⼀个操作;可以将多种属性识别为共⽤的简单情况(可以通过修改操作的其他部分来消除各种属性间的差别)。
呈现过程中的步骤有读书故事
:
1.确定呈现内容。
2.将呈现操作限制在当前 Clip。 Clip 由⽤户空间中的Shape指定,由使
⽤ Graphics 和 Graphics2D 中各种 clip 操作⽅法的程序控制。此⽤户剪贴区由当前 Transform 转换到设备空间中,并与设备剪贴区合并,后者是通过窗⼝可见性和设备范围定义的。⽤好听的词语2个字
户剪贴区和设备剪贴区的组合定义复合剪贴区,复合剪贴区确定最终的剪贴区域。呈现系统不能修改⽤户剪贴区来反映得到的复合剪贴区。
3.确定呈现的颜⾊。
4.使⽤ Graphics2D 上下⽂中当前的Composite属性将颜⾊应⽤于⽬标绘
图⾯。
三种买用英语怎么说
类型的呈现操作,以及各⾃特殊呈现过程的细节如下:
1.Shape 操作
1.如果该操作为 draw(Shape) 操作,则 Graphics2D 上下⽂中当前Stroke属性上的createStrokedShape⽅法将⽤于构造包含指定Shape 轮廓的新 Shape 对象。
2.使⽤ Graphics2D 上下⽂中的当前 Transform 将 Shape 从⽤户
空间转换到设备空间。
3.Shape 的轮廓是通过使⽤ Shape 的getPathIterator⽅法提取
的,该⽅法返回⼀个沿着 Shape 边界迭代得到的PathIterator
对象。
4.如果 Graphics2D 对象⽆法处理 PathIterator 对象返回的曲线段,则可以调⽤ Shape 的getPathIterator替代⽅法,该⽅法可
使 Shape 变得平滑。
5.对于PaintContext,需要 Graphics2D 上下⽂中的当前Paint,
它指定了在设备空间中呈现的颜⾊。
2.⽂本操作
1.以下步骤⽤于确定呈现指定 String 所需的字形集:
1.如果参数是 String,则要求 Graphics2D 上下⽂中的当前
Font 将 String 中的 Unicode 字符转换为⼀个字形集,以
表现 Font 实现的基本布局和成形算法。
2.如果参数是AttributedCharacterIterator,则要求迭代器
使⽤其内嵌的字体属性将其⾃⾝转换为TextLayout。TextLayout 实现更为复杂的字形布局算法,⽤于为不同书
写⽅向的多种字体⾃动执⾏ Unicode 双⽅向布局调整。
3.如果参数是GlyphVector,则 GlyphVector 对象已经包含
了特定于字体的合适字形代码和每个字形位置的显式坐标。
2.查询当前的 Font 以获取指定字形的轮廓。这些轮廓被视为⽤户空间中相对于步骤 1 中确定的每个字形位置的形状。
3.字符轮廓按上⾯Shape 操作下指⽰的⽅式填充。
4.查询当前 PaintContext 以获取 Paint,Paint 指定了设备空间中呈现的颜⾊。
3.Image 操作
1.感兴趣区域由源 Image 的边界框定义。此边界框在图像空间中指定,该空间即 Image 对象的本地坐标系。
2.如果 AffineTransform 被传递到drawImage(Image, AffineTransform, ImageObrver),则使⽤ AffineTransform 将
边界框从图像空间转换到⽤户空间。如果未提供
AffineTransform,则认为边界框已存在于⽤户空间中。
3.使⽤当前 Transform 将 Image 的边界框从⽤户空间转换到设备
空间。注意,转换边界框的结果不⼀定会得到设备空间中的矩形区
域。
4.Image 对象确定要呈现的颜⾊,并根据当前 Transform 和可选图
像转换所指定的源到⽬标坐标映射关系进⾏采样。
默认呈现属性
Graphics2D 呈现属性的默认值有:
Paint单杠引体向上训练方法
Component 的颜⾊。
Font
Component 的 Font。
Stroke
线宽为 1 的⽅形画笔,没有虚线、斜⾓线段接合和⽅形端点。Transform
⽤于 Component 的 GraphicsConfiguration 的getDefaultTransform。Composite
AlphaComposite.SRC_OVER规则。
Clip
不呈现 Clip,输出局限于 Component。
呈现兼容性问题
JDK(tm) 1.1 呈现模型是基于像素化的模型,该模型的坐标⽆限细分,且位于像素之间。使⽤⼀个⼀
像素宽的画笔执⾏绘制操作,填充路径锚点向下和向右的像素。JDK 1.1 呈现模型与⼤多数现有平台呈现类的功能⼀致,需要将整数坐标解析为离散的画笔,使其完全落在指定的像素成员上。
Java 2D(tm)(Java(tm) 2 平台)API ⽀持抗锯齿呈现器。⼀像素宽的画笔不需要完全落在像素 N 或像素 N+1 上。该画笔可以部分落在这两个像素上。不需要为宽画笔选择⼀个偏离⽅向,因为沿画笔遍历边缘发⽣的混合可让画笔的⼦像素位置对⽤户可见。另⼀⽅⾯,如果通过将KEY_ANTIALIASING提⽰键设置为VALUE_ANTIALIAS_OFF提⽰值⽽关闭了抗锯齿,则当画笔跨在像素边界上时,呈现器可能需要应⽤偏离来确定要修改哪个像素,例如在设备空间中,当画笔沿着整数坐标绘制时。虽然抗锯齿呈现器的功能使之不再需要呈现模型为画笔指定⼀个偏离,但对于在屏幕上绘制⼀像素宽的⽔平线和垂直线这种常见情形,还是需要抗锯齿和⾮抗锯齿呈现器执⾏类似的操作。为了确保通过将
KEY_ANTIALIASING提⽰键设置为VALUE_ANTIALIAS_ON⽽打开的抗锯齿不会导致这些线突然变为此宽度的⼆倍或⼀半不透明,需要让该模型为这些线指定⼀个路径,使它们完全覆盖特定的像素集,以帮助提⾼其平滑性。
Java 2D API 维持与 JDK 1.1 呈现⾏为的兼容性,遗留操作和现有呈现器⾏为在 Java 2D API 下没有改变。定义了映射到常规draw 和 fill ⽅法的遗留⽅法,它明确指⽰ Graphics2范睢简介
D 根据 Stroke 和 Transform 属性以及呈现提⽰的设置扩展 Graphics 的⽅式。在默认属性设置下该定义的执⾏⽅式完全
相同。例如,默认 Stroke 是⼀个宽度为 1 且没有虚线的 BasicStroke,屏幕绘制的默认 Transform 是 Identity 转换。
下⾯两个规则提供了可预见的呈现⾏为(⽆论是否使⽤了重叠还是抗锯齿)。
将设备坐标定义为在设备像素之间,这避免了重叠呈现和抗锯齿呈现的结果不⼀致。如感觉的英文单词
果将坐标定义为在像素的中⼼,则由矩形等形状覆盖的某些像素仅是半覆盖。通过重叠的呈现,半覆盖的像素可能呈现在形状内部,也可能呈现在形状外部。使⽤抗锯齿呈现,整个形状边缘上的像素都是半覆盖的。另⼀⽅⾯,由于坐标被定义在像素之间,所以⽆论是否使⽤抗锯齿进⾏呈现,像矩形这样的形状将不会有半覆盖像素。
使⽤ BasicStroke 对象勾画的线和路径可以“标准化”,从⽽在不同的可绘制点上定位时,⽆论使⽤重叠还是抗锯齿呈现进⾏的绘制都能提供⼀致的轮廓呈现。此标准化过程通过KEY_STROKE_CONTROL提⽰控制。虽然未指定准确的标准化算法,
但此标准化的⽬标是为了确保可以使⽤⼀致的可视外观呈现线条,⽽不考虑它们在像素⽹格上的位置;另⼀个⽬的是促进以抗锯齿模式呈现更连续的⽔平和垂直线,从⽽与没有抗锯齿的线更为相似。典型的标准化步骤可以将抗锯齿线端点提升到像素中⼼,以减少混合量;也可以调整⽆抗锯齿线的⼦像素位置,以便浮点线宽度舍⼊为近似
相等的偶数或奇数像素计数。此过程可以将端点向上移动半个像素(通常沿两个坐标轴的正⽆穷⼤⽅向移动),以得到⼀致的结果。
在默认属性设置下,以下定义的常规遗留⽅法与以前指定⾏为的执⾏⽅式完全相同:
对于 fill 操作,包括 fillRect、fillRoundRect、fillOval、fillArc、fillPolygon 和 clearRect,现在可以使⽤所需的 Shape 调⽤fill。例如,在填充矩形时可调⽤:
fill(new Rectangle(x, y, w, h));
类似地,对于绘制操作,包括 drawLine、drawRect、drawRoundReclol成就
t、drawOval、drawArc、drawPolyline 和drawPolygon,现在可以使⽤所需的 Shape 调⽤draw。例如,在绘制矩形时可调⽤:
draw(new Rectangle(x, y, w, h));
draw3DRect 和 fill3DRect ⽅法是根据 Graphics 类中的 drawLine 和fillRect ⽅法实现的,根据 Graphics2D 上下⽂中的当前Stroke 和
Paint 对象可以预知其⾏为。此类重写了那些独占地使⽤当前 Color 的
实现,重写当前 Paint 以及使⽤ fillRect 的 Paint,以描述与以前存
在的⽅法完全相同的⾏为,⽽不考虑当前 Stroke 的设置。
Graphics 类仅定义了 tColor ⽅法来控制要绘制的颜⾊。由于 Java 2D API 扩展了 Color 对象来实现新的 Paint 接⼝,因此现有的 tColor ⽅法现在是将当前 Paint 属性设置为 Color 对象的便捷⽅法。tColor(c) 等同于tPaint(c)。
Graphics 类定义了两种⽅法来控制如何将颜⾊应⽤到⽬标。
1.tPaintMode ⽅法实现为设置默认 Composite 的便捷⽅法,它等同于
tComposite(new AlphaComposite.SrcOver)。
2.tXORMode(Color xorcolor) ⽅法实现为设置特殊 Composite 对象的
便捷⽅法,它忽略源颜⾊的 Alpha 分量,并将⽬标颜⾊设置为以下值:
3.dstpixel = (PixelOf(srccolor) ^ PixelOf(xorcolor) ^ dstpixel); 另请参见:
RenderingHints
Graphics2D
protected Graphics2D()
构建⼀个新的 Graphics2D 对象。由于 Graphics2D 是⼀个抽象类,⽽且它必须由不同输出设备的⼦类定制,所以⽆法直接创建 Graphics2D 对
象。相反,Graphics2D 对象必须从另⼀个 Graphics2D 对象获得、由某个 Component 创建,或者从BufferedImage之类的图像对象获得。
另请参见:
draw3DRect
public void draw3DRect(int x,
int y,
int width,
int height,
boolean raid)
绘制指定矩形的 3-D ⾼亮显⽰边框。矩形的边是⾼亮显⽰的,以⾄于从
左上⾓看呈斜⾯并加亮。
⾼亮显⽰效果所⽤的颜⾊根据当前颜⾊确定。得到的矩形覆盖的区域为
width + 1 像素宽乘以 height + 1 像素⾼。此⽅法独占使⽤当前
Color,并忽略当前 Paint
覆盖:
类Graphics中的draw3DRect
参数:
x - 要绘制矩形的 x 坐标。
y - 要绘制矩形的 y 坐标。
width - 要绘制矩形的宽度。
height - 要绘制矩形的⾼度。
raid - ⼀个⽤于确定矩形是凸出平⾯显⽰还是凹⼊平⾯显⽰的
boolean 值。
另请参见:
Graphics.fill3DRect(int, int, int, int, boolean)
fill3DRect
public void fill3DRect(int x,
int y,
int width,
int height,
boolean raid)
绘制⼀个⽤当前颜⾊填充的 3-D ⾼亮显⽰矩形。矩形的边是⾼亮显⽰的,以⾄于从左上⾓看呈斜⾯并加亮。⾼亮显⽰效果和填充所⽤的颜⾊根据当前 Color 确定。此⽅法独占使⽤当前 Color,并忽略当前 Paint
覆盖:
类Graphics中的fill3DRect