Graphics2D
类扩展了Graphics
类,提供了更复杂的几何控制、坐标转换、颜色管理和文本布局。这是在Java(tm)平台上渲染二维形状、文本和图像的基本类。
坐标空间
传递给Graphics2D
对象的所有坐标都是在一个称为用户空间的与设备无关的坐标系统中指定的,应用程序使用这个坐标系统。 Graphics2D
对象包含一个AffineTransform
对象作为其渲染状态的一部分,该对象定义了如何将用户空间中的坐标转换为设备相关坐标中的设备空间。
设备空间中的坐标通常指的是单个设备像素,并且对齐在这些像素之间的无限薄间隙上。一些Graphics2D
对象可用于捕获渲染操作,以便在以后的某个时间在未知物理分辨率的具体设备上播放图形元文件。由于在捕获渲染操作时可能不知道分辨率,因此Graphics2D Transform
被设置为将用户坐标转换为近似目标设备分辨率的虚拟设备空间。如果估计不正确,则可能需要在播放时应用进一步的转换。
渲染属性对象执行的一些操作发生在设备空间中,但所有Graphics2D
方法都采用用户空间坐标。
每个Graphics2D
对象都与一个目标关联,该目标定义了渲染发生的位置。 GraphicsConfiguration
对象定义了渲染目标的特性,例如像素格式和分辨率。在Graphics2D
对象的整个生命周期中都使用相同的渲染目标。
创建Graphics2D
对象时,GraphicsConfiguration
指定了Graphics2D
目标(默认变换)的默认变换(Component
或Image
)。此默认变换将用户空间坐标系映射到屏幕和打印机设备坐标,使原点映射到设备目标区域的左上角,X坐标增加向右延伸,Y坐标增加向下延伸。对于接近72 dpi的设备(如屏幕设备),默认变换的缩放设置为标识。对于高分辨率设备(如打印机),默认变换的缩放设置为每平方英寸大约72个用户空间坐标。对于图像缓冲区,默认变换是Identity
变换。
渲染过程
渲染过程可以分为四个阶段,由Graphics2D
渲染属性控制。渲染器可以优化这些步骤中的许多步骤,要么通过缓存结果以供将来调用,要么通过将多个虚拟步骤合并为单个操作,要么通过识别各种属性作为可以通过修改操作的其他部分消除的常见简单情况。
渲染过程中的步骤包括:
- 确定要渲染的内容。
- 将渲染操作限制在当前的
Clip
中。Clip
由用户空间中的一个Shape
指定,并由使用Graphics
和Graphics2D
的各种剪切操作方法的程序控制。这个用户剪切通过当前的Transform
转换为设备空间,并与设备剪切组合,后者由窗口的可见性和设备范围定义。用户剪切和设备剪切的组合定义了复合剪切,它确定了最终的剪切区域。用户剪切不会被渲染系统修改以反映生成的复合剪切。 - 确定要渲染的颜色。
- 使用
Graphics2D
上下文中当前的Composite
属性将颜色应用于目标绘图表面。
三种渲染操作类型,以及每种操作的特定渲染过程的详细信息是:
Shape
操作- 如果操作是
draw(Shape)
操作,则使用当前Graphics2D
上下文中的Stroke
属性的createStrokedShape
方法来构造一个包含指定Shape
轮廓的新Shape
对象。 - 使用
Graphics2D
上下文中的当前Transform
将Shape
从用户空间转换为设备空间。 - 使用
Shape
的getPathIterator
方法提取Shape
的轮廓,该方法返回一个PathIterator
对象,该对象沿着Shape
的边界迭代。 - 如果
Graphics2D
对象无法处理PathIterator
对象返回的曲线段,则可以调用Shape
的替代getPathIterator
方法,该方法将Shape
展平。 - 查询
Graphics2D
上下文中的当前Paint
以获取PaintContext
,该上下文指定设备空间中要渲染的颜色。
- 如果操作是
- 文本操作
- 用于确定呈现指定
String
所需的字形集的步骤如下:- 如果参数是
String
,则会询问Graphics2D
上下文中的当前Font
将String
中的Unicode字符转换为一组字形,以便使用字体实现的任何基本布局和形状算法进行呈现。 - 如果参数是
AttributedCharacterIterator
,则会要求迭代器使用其嵌入的字体属性将自身转换为TextLayout
,该布局使用更复杂的字形布局算法,自动执行多个具有不同书写方向的字体的Unicode双向布局调整。 - 如果参数是
GlyphVector
,则GlyphVector
对象已经包含了适当的特定于字体的字形代码,并且每个字形的位置的显式坐标。
- 如果参数是
- 查询当前
Font
以获取指定字形的轮廓。这些轮廓被视为用户空间中相对于第1步确定的每个字形位置的形状。 - 如上所述在
Shape
操作下填充字符轮廓。 - 查询当前
Paint
以获取PaintContext
,该上下文指定设备空间中要渲染的颜色。
- 用于确定呈现指定
Image
操作- 感兴趣的区域由源
Image
的边界框定义。此边界框在图像空间中指定,这是Image
对象的本地坐标系。 - 如果将
AffineTransform
传递给drawImage(Image, AffineTransform, ImageObserver)
,则使用AffineTransform
将边界框从图像空间转换为用户空间。如果未提供AffineTransform
,则边界框被视为已经在用户空间中。 - 使用当前
Transform
将源Image
的边界框从用户空间转换为设备空间。请注意,转换边界框的结果不一定会在设备空间中产生矩形区域。 Image
对象根据当前Transform
和可选图像变换指定的源到目标坐标映射对颜色进行采样以确定要渲染的颜色。
- 感兴趣的区域由源
默认渲染属性
Graphics2D
渲染属性的默认值为:
-
Paint
-
Component
的颜色。 -
Font
-
Component
的Font
。 -
Stroke
- 一个线宽为1的方形笔,无虚线,斜接段连接和方形端点。
-
Transform
-
Component
的GraphicsConfiguration
的默认变换。 -
Composite
-
AlphaComposite.SRC_OVER
规则。 -
Clip
-
没有渲染
Clip
,输出被剪切到Component
。
渲染兼容性问题
JDK(tm) 1.1渲染模型基于一个像素化模型,该模型指定坐标是无限薄的,位于像素之间。绘图操作使用一个一像素宽的笔进行,填充路径上锚点下方和右侧的像素。JDK 1.1渲染模型与大多数现有平台渲染器类的功能一致,这些渲染器需要将整数坐标解析为必须完全落在指定数量的像素上的离散笔。Java 2D(tm) (Java(tm) 2 platform) 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
方法的传统方法,清楚地指示了Graphics2D
如何基于Stroke
和Transform
属性以及渲染提示进行扩展Graphics
。在默认属性设置下,定义的行为表现相同。例如,默认Stroke
是宽度为1且没有虚线的BasicStroke
,屏幕绘制的默认Transform是一个恒等变换。
以下两条规则提供了可预测的渲染行为,无论是使用锯齿还是抗锯齿。
- 设备坐标被定义为在设备像素之间,避免了在锯齿和抗锯齿渲染之间产生不一致的结果。如果将坐标定义为像素的中心,某些形状(如矩形)覆盖的一些像素将只被覆盖一半。在锯齿渲染中,被覆盖一半的像素要么在形状内部绘制,要么在形状外部绘制。在抗锯齿渲染中,整个形状边缘的像素将被覆盖一半。另一方面,由于坐标被定义为在像素之间,像矩形这样的形状不会有一半被覆盖的像素,无论是使用抗锯齿渲染还是不使用。
- 使用
BasicStroke
对象描边的线条和路径可以被“标准化”,以便在绘制到可绘制物的各个点时,无论是使用锯齿还是抗锯齿渲染,都能提供一致的轮廓渲染。这个标准化过程由KEY_STROKE_CONTROL
提示控制。具体的标准化算法没有指定,但这种标准化的目标是确保线条以一致的视觉外观呈现,无论它们如何落在像素网格上,并促进抗锯齿模式下更加坚实的水平和垂直线条,使其更接近非抗锯齿模式下的对应线条。一个典型的标准化步骤可能会将抗锯齿线条端点提升到像素中心,以减少混合的数量,或者调整非抗锯齿线条的亚像素定位,使得浮点线宽以等概率四舍五入为偶数或奇数像素计数。这个过程可以将端点移动多达半个像素(通常沿着两个轴向正无穷大方向)以促进这些一致的结果。
以下一般传统方法的定义在默认属性设置下表现与先前指定的行为相同:
- 对于填充操作,包括
fillRect
、fillRoundRect
、fillOval
、fillArc
、fillPolygon
和clearRect
,现在可以使用所需的Shape
调用fill
。例如,填充矩形时:fill(new Rectangle(x, y, w, h));
被调用。 - 类似地,对于绘制操作,包括
drawLine
、drawRect
、drawRoundRect
、drawOval
、drawArc
、drawPolyline
和drawPolygon
,现在可以使用所需的Shape
调用draw
。例如,绘制矩形时:draw(new Rectangle(x, y, w, h));
被调用。 draw3DRect
和fill3DRect
方法是在Graphics
类中以drawLine
和fillRect
方法的形式实现的,这将根据Graphics2D
上下文中当前的Stroke
和Paint
对象来预测它们的行为。这个类覆盖了那些使用当前Color
独占的实现版本,覆盖了当前Paint
并使用fillRect
来描述与预先存在的方法完全相同的行为,无论当前Stroke
的设置如何。
Graphics
类仅定义了setColor
方法来控制要绘制的颜色。由于Java 2D API扩展了Color
对象以实现新的Paint
接口,现有的setColor
方法现在是一个设置当前Paint
属性为Color
对象的便利方法。setColor(c)
等同于setPaint(c)
。
Graphics
类定义了两种控制颜色应用于目标的方法。
setPaintMode
方法被实现为一个设置默认Composite
的便利方法,等同于setComposite(new AlphaComposite.SrcOver)
。setXORMode(Color xorcolor)
方法被实现为一个设置特殊Composite
对象的便利方法,该对象忽略源颜色的Alpha
组件,并将目标颜色设置为值:dstpixel = (PixelOf(srccolor) ^ PixelOf(xorcolor) ^ dstpixel);
- 参见:
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionabstract void
addRenderingHints
(Map<?, ?> hints) 设置渲染算法的任意数量的偏好值。abstract void
将当前Clip
与指定Shape
的内部相交,并将Clip
设置为结果交集。abstract void
使用当前Graphics2D
上下文的设置对Shape
的轮廓进行描边。void
draw3DRect
(int x, int y, int width, int height, boolean raised) 绘制指定矩形的3D突出轮廓。abstract void
drawGlyphVector
(GlyphVector g, float x, float y) 使用Graphics2D
上下文的渲染属性呈现指定GlyphVector
的文本。abstract void
drawImage
(BufferedImage img, BufferedImageOp op, int x, int y) 渲染使用BufferedImageOp
过滤的BufferedImage
。abstract boolean
drawImage
(Image img, AffineTransform xform, ImageObserver obs) 渲染图像,在绘制之前将图像空间应用转换到用户空间。abstract void
drawRenderableImage
(RenderableImage img, AffineTransform xform) 渲染RenderableImage
,在绘制之前将图像空间应用转换到用户空间。abstract void
drawRenderedImage
(RenderedImage img, AffineTransform xform) 渲染RenderedImage
,在绘制之前将图像空间应用转换到用户空间。abstract void
drawString
(String str, float x, float y) 使用Graphics2D
上下文中当前文本属性状态绘制指定String
的文本。abstract void
drawString
(String str, int x, int y) 使用Graphics2D
上下文中当前文本属性状态绘制指定String
的文本。abstract void
drawString
(AttributedCharacterIterator iterator, float x, float y) 使用TextAttribute
类的规范应用指定迭代器的文本及其属性的渲染。abstract void
drawString
(AttributedCharacterIterator iterator, int x, int y) 使用TextAttribute
类的规范应用指定迭代器的文本及其属性的渲染。abstract void
使用Graphics2D
上下文的设置填充Shape
的内部。void
fill3DRect
(int x, int y, int width, int height, boolean raised) 绘制填充有当前颜色的3D突出矩形。abstract Color
返回用于清除区域的背景颜色。abstract Composite
返回Graphics2D
上下文中的当前Composite
。abstract GraphicsConfiguration
返回与此Graphics2D
关联的设备配置。abstract FontRenderContext
获取Graphics2D
上下文中Font
的渲染上下文。abstract Paint
getPaint()
返回Graphics2D
上下文的当前Paint
。abstract Object
getRenderingHint
(RenderingHints.Key hintKey) 返回渲染算法的单个偏好值。abstract RenderingHints
获取渲染算法的偏好值。abstract Stroke
返回Graphics2D
上下文中的当前Stroke
。abstract AffineTransform
返回Graphics2D
上下文中当前Transform
的副本。abstract boolean
检查指定的Shape
是否与指定的设备空间中的Rectangle
相交。abstract void
rotate
(double theta) 将当前Graphics2D
Transform
与旋转变换连接起来。abstract void
rotate
(double theta, double x, double y) 将当前Graphics2D
Transform
与平移旋转变换连接起来。abstract void
scale
(double sx, double sy) 将当前Graphics2D
Transform
与缩放变换连接起来。随后的渲染根据相对于先前缩放的指定缩放因子调整大小。abstract void
setBackground
(Color color) 设置Graphics2D
上下文的背景颜色。abstract void
setComposite
(Composite comp) 设置Graphics2D
上下文的Composite
。abstract void
设置Graphics2D
上下文的Paint
属性。abstract void
setRenderingHint
(RenderingHints.Key hintKey, Object hintValue) 设置渲染算法的单个偏好值。abstract void
setRenderingHints
(Map<?, ?> hints) 使用指定的hints
替换渲染算法的所有偏好值。abstract void
设置Graphics2D
上下文的Stroke
。abstract void
覆盖Graphics2D
上下文中的变换。abstract void
shear
(double shx, double shy) 将当前Graphics2D
Transform
与剪切变换连接起来。abstract void
根据规则“最后指定的先应用”将AffineTransform
对象与此Graphics2D
中的Transform
组合。abstract void
translate
(double tx, double ty) 将当前Graphics2D Transform
与平移变换连接起来。abstract void
translate
(int x, int y) 将Graphics2D
上下文的原点平移到当前坐标系中的点(x,y)。Methods declared in class java.awt.Graphics
clearRect, clipRect, copyArea, create, create, dispose, drawArc, drawBytes, drawChars, drawImage, drawImage, drawImage, drawImage, drawImage, drawImage, drawLine, drawOval, drawPolygon, drawPolygon, drawPolyline, drawRect, drawRoundRect, fillArc, fillOval, fillPolygon, fillPolygon, fillRect, fillRoundRect, finalize, getClip, getClipBounds, getClipBounds, getClipRect, getColor, getFont, getFontMetrics, getFontMetrics, hitClip, setClip, setClip, setColor, setFont, setPaintMode, setXORMode, toString
-
Constructor Details
-
Graphics2D
protected Graphics2D()构造一个新的Graphics2D
对象。由于Graphics2D
是一个抽象类,并且必须由子类为不同的输出设备进行定制,因此不能直接创建Graphics2D
对象。相反,必须从另一个Graphics2D
对象中获取Graphics2D
对象,由Component
创建,或者从诸如BufferedImage
对象中获取。- 参见:
-
-
Method Details
-
draw3DRect
public void draw3DRect(int x, int y, int width, int height, boolean raised) 绘制指定矩形的3D突出轮廓。矩形的边缘被突出显示,使其看起来像是从左上角被倒角和照亮。用于突出显示效果的颜色是基于当前颜色确定的。结果矩形覆盖的区域宽度为
width + 1
像素,高度为height + 1
像素。此方法仅使用当前Color
,忽略当前Paint
。- 覆盖:
-
draw3DRect
在类中Graphics
- 参数:
-
x
- 要绘制的矩形的x坐标。 -
y
- 要绘制的矩形的y坐标。 -
width
- 要绘制的矩形的宽度。 -
height
- 要绘制的矩形的高度。 -
raised
- 一个布尔值,确定矩形是凸起还是凹陷。 - 参见:
-
fill3DRect
public void fill3DRect(int x, int y, int width, int height, boolean raised) 绘制填充有当前颜色的3D突出矩形。矩形的边缘被突出显示,使其看起来像是从左上角被倒角和照亮。用于突出显示效果和填充的颜色是根据当前Color
确定的。此方法仅使用当前Color
,忽略当前Paint
。- 覆盖:
-
fill3DRect
在类中Graphics
- 参数:
-
x
- 要填充的矩形的x坐标。 -
y
- 要填充的矩形的y坐标。 -
width
- 要填充的矩形的宽度。 -
height
- 要填充的矩形的高度。 -
raised
- 一个布尔值,确定矩形是凸起还是凹陷。 - 参见:
-
draw
使用当前Graphics2D
上下文的设置对Shape
的轮廓进行描边。应用的渲染属性包括Clip
、Transform
、Paint
、Composite
和Stroke
属性。- 参数:
-
s
- 要渲染的Shape
- 参见:
-
drawImage
渲染图像,应用从图像空间到用户空间的变换后再绘制。从用户空间到设备空间的转换使用Graphics2D
中的当前Transform
完成。在应用Graphics2D
上下文中的变换属性之前,将指定的变换应用于图像。应用的渲染属性包括Clip
、Transform
和Composite
属性。请注意,如果指定的变换不可逆,则不会进行渲染。- 参数:
-
img
- 要呈现的指定图像。如果img
为null,则此方法不执行任何操作。 -
xform
- 从图像空间到用户空间的转换 -
obs
- 要通知的ImageObserver
,随着更多的Image
被转换,通知它 - 返回:
-
如果
Image
完全加载并完全呈现,或者为null,则返回true
; 如果Image
仍在加载中,则返回false
。 - 参见:
-
drawImage
渲染一个使用BufferedImageOp
过滤的BufferedImage
。应用的渲染属性包括Clip
、Transform
和Composite
属性。这相当于:img1 = op.filter(img, null); drawImage(img1, new AffineTransform(1f,0f,0f,1f,x,y), null);
- 参数:
-
img
- 要呈现的指定BufferedImage
。如果img
为null,则此方法不执行任何操作。 -
op
- 在呈现之前应用于图像的滤镜 -
x
- 用户空间中要呈现图像左上角的位置的x坐标 -
y
- 用户空间中要呈现图像左上角的位置的y坐标 - 参见:
-
drawRenderedImage
渲染一个RenderedImage
,在绘制之前应用从图像空间到用户空间的转换。从用户空间到设备空间的转换是使用Graphics2D
中当前Transform
完成的。指定的转换应用于图像,然后应用Graphics2D
上下文中的转换属性。应用的渲染属性包括Clip
、Transform
和Composite
属性。请注意,如果指定的转换不可逆,则不会进行任何渲染。- 参数:
-
img
- 要呈现的图像。如果img
为null,则此方法不执行任何操作。 -
xform
- 从图像空间到用户空间的转换 - 参见:
-
drawRenderableImage
渲染一个RenderableImage
,在绘制之前应用从图像空间到用户空间的转换。从用户空间到设备空间的转换是使用Graphics2D
中当前Transform
完成的。指定的转换应用于图像,然后应用Graphics2D
上下文中的转换属性。应用的渲染属性包括Clip
、Transform
和Composite
属性。请注意,如果指定的转换不可逆,则不会进行任何渲染。在
Graphics2D
对象上设置的渲染提示可能会在渲染RenderableImage
时使用。如果需要对特定RenderableImage
识别的特定提示进行显式控制,或者需要了解使用了哪些提示,则应直接从RenderableImage
获取RenderedImage
,并使用drawRenderedImage
进行呈现。- 参数:
-
img
- 要呈现的图像。如果img
为null,则此方法不执行任何操作。 -
xform
- 从图像空间到用户空间的转换 - 参见:
-
drawString
渲染指定String
的文本,使用Graphics2D
上下文中的当前文本属性状态。第一个字符的基线位于用户空间中的位置(x, y)。应用的渲染属性包括Clip
、Transform
、Paint
、Font
和Composite
属性。对于希伯来语和阿拉伯语等脚本系统中的字符,可以从右向左呈现字形,此时提供的坐标是基线上最左侧字符的位置。- 在类中由:
-
drawString
in classGraphics
- 参数:
-
str
- 要呈现的字符串 -
x
-String
应呈现的位置的x坐标 -
y
-String
应呈现的位置的y坐标 - 抛出:
-
NullPointerException
- 如果str
为null
- 自:
- 1.0
- 参见:
-
drawString
渲染由指定String
指定的文本,使用Graphics2D
上下文中的当前文本属性状态。第一个字符的基线位于用户空间中的位置(x, y)。应用的渲染属性包括Clip
、Transform
、Paint
、Font
和Composite
属性。对于希伯来语和阿拉伯语等脚本系统中的字符,可以从右向左呈现字形,此时提供的坐标是基线上最左侧字符的位置。- 参数:
-
str
- 要呈现的String
-
x
-String
应呈现的位置的x坐标 -
y
-String
应呈现的位置的y坐标 - 抛出:
-
NullPointerException
- 如果str
为null
- 参见:
-
drawString
渲染由指定迭代器指定的文本,根据TextAttribute
类的规范应用其属性。第一个字符的基线位于用户空间中的位置(x, y)。对于希伯来语和阿拉伯语等脚本系统中的字符,可以从右向左呈现字形,此时提供的坐标是基线上最左侧字符的位置。
- 指定者:
-
drawString
在类Graphics
中 - 参数:
-
iterator
- 要呈现其文本的迭代器 -
x
- 要呈现迭代器文本的x坐标 -
y
- 要呈现迭代器文本的y坐标 - 抛出:
-
NullPointerException
- 如果iterator
为null
- 参见:
-
drawString
使用TextAttribute
类的规范应用指定迭代器的文本。第一个字符的基线位于用户空间中的位置(x, y)。对于希伯来语和阿拉伯语等脚本系统中的字符,可以从右向左呈现字形,此时提供的坐标是基线上最左侧字符的位置。
- 参数:
-
iterator
- 要呈现其文本的迭代器 -
x
- 要呈现迭代器文本的x坐标 -
y
- 要呈现迭代器文本的y坐标 - 抛出:
-
NullPointerException
- 如果iterator
为null
- 参见:
-
drawGlyphVector
使用Graphics2D
上下文的呈现属性呈现指定GlyphVector
的文本。 应用的呈现属性包括Clip
、Transform
、Paint
和Composite
属性。GlyphVector
指定来自Font
的单个字形。GlyphVector
还可以包含字形位置。 这是将一组字符快速呈现到屏幕上的最快方法。- 参数:
-
g
- 要呈现的GlyphVector
-
x
- 要呈现字形的用户空间中的x位置 -
y
- 要呈现字形的用户空间中的y位置 - 抛出:
-
NullPointerException
- 如果g
为null
- 参见:
-
fill
使用Graphics2D
上下文的设置填充Shape
的内部。 应用的呈现属性包括Clip
、Transform
、Paint
和Composite
。- 参数:
-
s
- 要填充的Shape
- 参见:
-
hit
检查指定的Shape
是否与指定的设备空间中的Rectangle
相交。 如果onStroke
为false,则此方法检查指定Shape
的内部是否与指定的Rectangle
相交。 如果onStroke
为true
,则此方法检查指定Shape
的轮廓的Stroke
是否与指定的Rectangle
相交。 考虑的呈现属性包括Clip
、Transform
和Stroke
属性。- 参数:
-
rect
- 要检查是否命中的设备空间中的区域 -
s
- 要检查是否命中的Shape
-
onStroke
- 用于选择测试描边形状还是填充形状的标志。 如果标志为true
,则测试Stroke
轮廓。 如果标志为false
,则测试填充的Shape
。 - 返回:
-
如果命中则为
true
; 否则为false
。 - 参见:
-
getDeviceConfiguration
返回与此Graphics2D
关联的设备配置。- 返回:
-
此
Graphics2D
的设备配置。
-
setComposite
设置Graphics2D
上下文的Composite
。Composite
用于所有绘图方法,如drawImage
、drawString
、draw
和fill
。 它指定在呈现过程中如何将新像素与图形设备上的现有像素组合。如果此
Graphics2D
上下文正在向显示屏上的Component
绘图,并且Composite
是自定义对象而不是AlphaComposite
类的实例,并且存在安全管理器,则将调用其checkPermission
方法,该方法具有AWTPermission("readDisplayPixels")
权限。- 参数:
-
comp
- 用于呈现的Composite
对象 - 抛出:
-
SecurityException
- 如果正在使用自定义Composite
对象进行屏幕呈现,并且设置了安全管理器且其checkPermission
方法不允许该操作。 - 参见:
-
setPaint
设置Graphics2D
上下文的Paint
属性。 使用null Paint
对象调用此方法不会对此Graphics2D
的当前Paint
属性产生任何影响。- 参数:
-
paint
- 用于在呈现过程中生成颜色的Paint
对象,或null
- 参见:
-
setStroke
设置Graphics2D
上下文的Stroke
。- 参数:
-
s
- 在渲染过程中用于描边Shape
的Stroke
对象 - 参见:
-
setRenderingHint
设置渲染算法的单个偏好设置值。提示类别包括控制渲染质量和渲染过程中整体时间/质量权衡的控制。请参考RenderingHints
类以获取一些常见键和值的定义。- 参数:
-
hintKey
- 要设置的提示的键。 -
hintValue
- 表示指定提示类别的偏好设置值。 - 参见:
-
getRenderingHint
返回渲染算法的单个偏好设置值。提示类别包括控制渲染质量和渲染过程中整体时间/质量权衡的控制。请参考RenderingHints
类以获取一些常见键和值的定义。- 参数:
-
hintKey
- 对应要获取的提示的键。 - 返回:
-
表示指定提示键的值的对象。一些键及其关联值在
RenderingHints
类中有定义。 - 参见:
-
setRenderingHints
用指定的hints
替换渲染算法的所有偏好设置值。所有渲染提示的现有值都将被丢弃,并且新的已知提示和值集将从指定的Map
对象初始化。提示类别包括控制渲染质量和渲染过程中整体时间/质量权衡的控制。请参考RenderingHints
类以获取一些常见键和值的定义。- 参数:
-
hints
- 要设置的渲染提示 - 参见:
-
addRenderingHints
设置任意数量的渲染算法偏好设置值。仅修改指定Map
对象中存在的渲染提示的值。所有其他未在指定对象中出现的偏好设置将保持不变。提示类别包括控制渲染质量和渲染过程中整体时间/质量权衡的控制。请参考RenderingHints
类以获取一些常见键和值的定义。- 参数:
-
hints
- 要设置的渲染提示 - 参见:
-
getRenderingHints
获取渲染算法的偏好设置。提示类别包括控制渲染质量和渲染过程中整体时间/质量权衡的控制。返回一次性指定的所有提示键/值对。请参考RenderingHints
类以获取一些常见键和值的定义。- 返回:
-
包含当前偏好设置的
RenderingHints
实例的引用。 - 参见:
-
translate
public abstract void translate(int x, int y) 将Graphics2D
上下文的原点平移到当前坐标系中的点(x, y)。修改Graphics2D
上下文,使其新原点对应于Graphics2D
上下文以前坐标系中的点(x, y)。在此图形上下文上的后续渲染操作中使用的所有坐标都是相对于这个新原点的。 -
translate
public abstract void translate(double tx, double ty) 将当前Graphics2D Transform
与平移变换连接起来。后续渲染相对于先前位置被指定的距离平移。这相当于调用transform(T),其中T是由以下矩阵表示的AffineTransform
:[ 1 0 tx ] [ 0 1 ty ] [ 0 0 1 ]
- 参数:
-
tx
- 沿x轴平移的距离 -
ty
- 沿y轴平移的距离
-
rotate
public abstract void rotate(double theta) 将当前Graphics2D
Transform
与旋转变换连接起来。后续渲染相对于先前原点按指定弧度旋转。这相当于调用transform(R)
,其中R是由以下矩阵表示的AffineTransform
:[ cos(theta) -sin(theta) 0 ] [ sin(theta) cos(theta) 0 ] [ 0 0 1 ]
以正角度theta旋转将正x轴上的点旋转到正y轴上。- 参数:
-
theta
- 弧度中的旋转角度
-
rotate
public abstract void rotate(double theta, double x, double y) 将当前Graphics2D
Transform
与平移旋转变换连接起来。后续渲染将通过一个变换进行,该变换由移动到指定位置、按指定弧度旋转,然后再按原始平移量返回构建而成。这相当于以下一系列调用:translate(x, y); rotate(theta); translate(-x, -y);
以正角度theta旋转将正x轴上的点旋转到正y轴上。- 参数:
-
theta
- 弧度中的旋转角度 -
x
- 旋转原点的x坐标 -
y
- 旋转原点的y坐标
-
scale
public abstract void scale(double sx, double sy) 将当前Graphics2D
Transform
与缩放变换连接起来。后续渲染根据指定的缩放因子相对于先前缩放进行调整。这相当于调用transform(S)
,其中S是由以下矩阵表示的AffineTransform
:[ sx 0 0 ] [ 0 sy 0 ] [ 0 0 1 ]
- 参数:
-
sx
- X坐标在后续渲染操作中相对于先前渲染操作要乘以的量。 -
sy
- Y坐标在后续渲染操作中相对于先前渲染操作要乘以的量。
-
shear
public abstract void shear(double shx, double shy) 将当前Graphics2D
Transform
与错切变换连接起来。后续渲染相对于先前位置按指定倍数错切。这相当于调用transform(SH)
,其中SH是由以下矩阵表示的AffineTransform
:[ 1 shx 0 ] [ shy 1 0 ] [ 0 0 1 ]
- 参数:
-
shx
- 根据Y坐标的函数,坐标在正X轴方向上移动的倍数 -
shy
- 根据X坐标的函数,坐标在正Y轴方向上移动的倍数
-
transform
根据最后指定的先应用规则,将AffineTransform
对象与此Graphics2D
中的Transform
组合。如果当前Transform
为Cx,则与Tx组合的结果是一个新的Transform Cx'。Cx'成为此Graphics2D
的当前Transform
。通过更新的Transform
Cx'转换点p等同于首先通过Tx转换p,然后通过原始Transform
Cx转换结果。换句话说,Cx'(p) = Cx(Tx(p))。如有必要,将复制Tx,以便进一步修改Tx不会影响渲染。- 参数:
-
Tx
- 要与当前Transform
组合的AffineTransform
对象 - 参见:
-
setTransform
覆盖Graphics2D
上下文中的Transform。警告:此方法不应该用于在现有Transform之上应用新的坐标变换,因为Graphics2D
可能已经有其他用途所需的Transform,例如渲染Swing组件或应用缩放变换以调整打印机的分辨率。要添加坐标变换,请使用
transform
、rotate
、scale
或shear
方法。setTransform
方法仅用于在渲染后恢复原始Graphics2D
变换,如下例所示:// 获取当前变换 AffineTransform saveAT = g2.getTransform(); // 执行变换 g2d.transform(...); // 渲染 g2d.draw(...); // 恢复原始变换 g2d.setTransform(saveAT);
- 参数:
-
Tx
- 从getTransform
方法检索到的AffineTransform
- 参见:
-
getTransform
返回Graphics2D
上下文中当前Transform
的副本。- 返回:
-
Graphics2D
上下文中当前的AffineTransform
。 - 参见:
-
getPaint
返回Graphics2D
上下文中当前的Paint
。- 返回:
-
当前
Graphics2D Paint
,定义了颜色或图案。 - 参见:
-
getComposite
返回Graphics2D
上下文中当前的Composite
。- 返回:
-
当前
Graphics2D Composite
,定义了混合样式。 - 参见:
-
setBackground
设置Graphics2D
上下文的背景颜色。背景颜色用于清除区域。当为Component
构造Graphics2D
时,背景颜色从Component
继承。仅影响Graphics2D
上下文中后续的clearRect
调用,而不影响Component
的背景颜色。要更改Component
的背景,请使用Component
的适当方法。- 参数:
-
color
- 用于后续调用clearRect
的背景颜色 - 参见:
-
getBackground
返回用于清除区域的背景颜色。- 返回:
-
当前
Graphics2D Color
,定义了背景颜色。 - 参见:
-
getStroke
返回Graphics2D
上下文中当前的Stroke
。- 返回:
-
当前
Graphics2D Stroke
,定义了线条样式。 - 参见:
-
clip
将当前Clip
与指定Shape
的内部相交,并将Clip
设置为结果的交集。在与当前Clip
相交之前,指定的Shape
将使用当前Graphics2D
Transform
进行转换。此方法用于使当前Clip
变小。要使Clip
变大,请使用setClip
。此方法修改的用户剪辑独立于与设备边界和可见性相关联的剪辑。如果之前未设置剪辑,或者使用
null
参数清除了剪辑,则指定的Shape
将成为新的用户剪辑。由于此方法将指定的形状与当前剪辑相交,因此对于
null
形状,除非用户剪辑也为null
,否则将抛出NullPointerException
。因此,不建议使用null
参数调用此方法。- 参数:
-
s
- 与当前Clip
相交的Shape
。此方法更新当前Clip
。 - 抛出:
-
NullPointerException
- 如果s
为null
且当前设置了用户剪辑。
-
getFontRenderContext
获取Graphics2D
上下文中Font
的渲染上下文。FontRenderContext
封装了应用程序提示,如抗锯齿和分数度量,以及目标设备特定信息,如每英寸点数。当使用执行排版格式化的对象时,例如Font
和TextLayout
,应用程序应提供此信息。当应用程序执行自己的布局并需要各种字形特征的准确测量时,例如前进和行高,应提供此信息,当应用了各种呈现提示时。- 返回:
-
指向
FontRenderContext
实例的引用。 - 自:
- 1.2
- 参见:
-