java.lang.Object java.awt.RenderingHints
RenderingHints
类定义和管理键和关联值的集合,它允许应用程序将输入提供给其他类使用的算法选择,这些类执行呈现和图像处理服务。Graphics2D
类以及实现 BufferedImageOp
和 RasterOp
的类都提供了一些方法,用于获取并可能设置单个 RenderingHints
键(或键组)及其关联值。当这些实现执行任何呈现或图像处理操作时,它们应当检查调用者所请求的任何 RenderingHints
的值,并相应地修改所使用的算法,以发挥它们的最佳功能。
注意,因为这些键和值是一些提示,所以不要求某一给定实现支持下面指示的所有可能选择,或者可以响应请求修改其算法选择。不同提示键的值也可以交互,从而在一种情况下可支持给定键的所有变体。当修改与其他键关联的值时,实现可能会受更多限制。例如,某些实现在抗锯齿提示关闭时可以提供几种抖动类型,但在抗锯齿开启时几乎不能控制抖动。受支持的键和提示的完整集合也因目标而有所不同,因为运行时在呈现到屏幕、呈现到 BufferedImage
对象或在打印时可能使用不同的底层模块。
实现可以随意地完全忽略提示,但应当尝试使用尽可能接近请求的实现算法。如果在将任意值用于关联提示键时某一实现支持给定的算法,那么它至少必须在此键的值正好是指定算法的值时才执行此操作。
用于控制提示的键都是为关联 RenderingHints.Key
类创建子类的特殊值。此类中许多常见提示在下文表示为静态常量,但列表并没有包含所有这类提示。通过定义子类化 Key
的新对象并定义关联值,其他包可以创建其他提示。
嵌套类摘要 | |
---|---|
static class |
RenderingHints.Key 定义与 RenderingHints 一起使用的、用来控制呈现和图像管线中各种算法选择的所有键的基本类型。 |
从接口 java.util.Map 继承的嵌套类/接口 |
---|
Map.Entry<K,V> |
字段摘要 | |
---|---|
static RenderingHints.Key |
KEY_ALPHA_INTERPOLATION Alpha 插值提示键。 |
static RenderingHints.Key |
KEY_ANTIALIASING 抗锯齿提示键。 |
static RenderingHints.Key |
KEY_COLOR_RENDERING 颜色呈现提示键。 |
static RenderingHints.Key |
KEY_DITHERING 抖动提示键。 |
static RenderingHints.Key |
KEY_FRACTIONALMETRICS 字体小数规格提示键。 |
static RenderingHints.Key |
KEY_INTERPOLATION 插值提示键。 |
static RenderingHints.Key |
KEY_RENDERING 呈现提示键。 |
static RenderingHints.Key |
KEY_STROKE_CONTROL 笔划规范化控制提示键。 |
static RenderingHints.Key |
KEY_TEXT_ANTIALIASING 文本抗锯齿提示键。 |
static RenderingHints.Key |
KEY_TEXT_LCD_CONTRAST LCD 文本对比呈现提示键。 |
static Object |
VALUE_ALPHA_INTERPOLATION_DEFAULT Alpha 插值提示值——由实现选择对性能和质量进行良好权衡的 alpha 混合算法 |
static Object |
VALUE_ALPHA_INTERPOLATION_QUALITY Alpha 插值提示值——选择偏重于精确度和视觉质量的 alpha 混合算法。 |
static Object |
VALUE_ALPHA_INTERPOLATION_SPEED Alpha 插值提示值——选择偏重于计算速度的 alpha 混合算法。 |
static Object |
VALUE_ANTIALIAS_DEFAULT 抗锯齿提示值——使用由实现选择的默认抗锯齿模式完成呈现。 |
static Object |
VALUE_ANTIALIAS_OFF 抗锯齿提示值——在不使用抗锯齿模式的情况下完成呈现。 |
static Object |
VALUE_ANTIALIAS_ON 抗锯齿提示值——使用抗锯齿模式完成呈现。 |
static Object |
VALUE_COLOR_RENDER_DEFAULT 颜色呈现提示值——根据实现的选择执行颜色转换计算,以表示可用的性能和精确度之间的最佳权衡。 |
static Object |
VALUE_COLOR_RENDER_QUALITY 颜色呈现提示值——用最高的精确度和视觉质量执行颜色转换计算。 |
static Object |
VALUE_COLOR_RENDER_SPEED 颜色呈现提示值——最快地执行输出设备格式的颜色转换。 |
static Object |
VALUE_DITHER_DEFAULT 抖动提示值——对该实现选择的抖动使用默认值。 |
static Object |
VALUE_DITHER_DISABLE 抖动提示值——呈现几何形状时不抖动。 |
static Object |
VALUE_DITHER_ENABLE 抖动提示值——如果需要,在呈现几何形状时抖动。 |
static Object |
VALUE_FRACTIONALMETRICS_DEFAULT 字体小数规格提示值——用实现选择的精度定位字符字形。 |
static Object |
VALUE_FRACTIONALMETRICS_OFF 字体小数规格提示值——用舍入为像素边界的 advance width 定位字符字形。 |
static Object |
VALUE_FRACTIONALMETRICS_ON 字体小数规格提示值——用子像素精确度定位字符字形。 |
static Object |
VALUE_INTERPOLATION_BICUBIC 插值提示值—— 使用 X 和 Y 中的立方函数插入图像中整数坐标附近的 9 个样本,以生成一个颜色样本。 |
static Object |
VALUE_INTERPOLATION_BILINEAR 插值提示值——图像中最接近整数坐标样本的 4 种颜色样本被线性地插入,以生成一个颜色样本。 |
static Object |
VALUE_INTERPOLATION_NEAREST_NEIGHBOR 插值提示值——使用图像中最接近整数坐标样本的颜色样本。 |
static Object |
VALUE_RENDER_DEFAULT 呈现提示值——由实现选择对性能和质量进行良好权衡的呈现算法。 |
static Object |
VALUE_RENDER_QUALITY 呈现提示值——选择偏重输出质量的呈现算法。 |
static Object |
VALUE_RENDER_SPEED 呈现提示值——选择偏重输出速度的呈现算法。 |
static Object |
VALUE_STROKE_DEFAULT 笔划规范化控制提示值——根据给定实现的权衡,可以修改几何形状或保留原来的几何形状。 |
static Object |
VALUE_STROKE_NORMALIZE 笔划规范化控制提示值——几何形状应当规范化,以提高均匀性或直线间隔和整体美观。 |
static Object |
VALUE_STROKE_PURE 笔划规范化控制提示值——几何形状应该保持不变并使用子像素精确度呈现。 |
static Object |
VALUE_TEXT_ANTIALIAS_DEFAULT 文本抗锯齿提示值——根据 KEY_ANTIALIASING 提示或由实现选择的默认值完成文本呈现。 |
static Object |
VALUE_TEXT_ANTIALIAS_GASP 文本抗锯齿提示值——文本呈现需要使用字体资源中的信息,这些信息指定了每个点大小是否适合应用 VALUE_TEXT_ANTIALIAS_ON 或 VALUE_TEXT_ANTIALIAS_OFF 。 |
static Object |
VALUE_TEXT_ANTIALIAS_LCD_HBGR 文本抗锯齿提示值——要求针对 LCD 显示器优化文本显示,子像素按从左到右为 B、G、R 的顺序显示,从而使水平子像素分辨率是全部水平像素分辨率 (HBGR) 的三倍。 |
static Object |
VALUE_TEXT_ANTIALIAS_LCD_HRGB 文本抗锯齿提示值——要求针对 LCD 显示器优化文本显示,该 LCD 显示器子像素按从左到右为 R、G、B 的顺序显示,从而使水平子像素分辨率是全部水平像素分辨率 (HRGB) 的三倍。 |
static Object |
VALUE_TEXT_ANTIALIAS_LCD_VBGR 文本抗锯齿提示值——要求针对 LCD 显示器优化文本显示,子像素组织按从顶部到底部为 R、G、B 的顺序显示,从而使垂直子像素分辨率是全部垂直像素分辨率 (VBGR) 的三倍。 |
static Object |
VALUE_TEXT_ANTIALIAS_LCD_VRGB 文本抗锯齿提示值——要求针对 LCD 显示器优化文本显示,子像素组织按从顶部到底部为 R、G、B 的顺序显示,从而使垂直子像素分辨率是全部垂直像素分辨率 (VRGB) 的三倍。 |
static Object |
VALUE_TEXT_ANTIALIAS_OFF 文本抗锯齿提示值——不使用任何抗锯齿形式完成文本呈现。 |
static Object |
VALUE_TEXT_ANTIALIAS_ON 文本抗锯齿提示值——使用某种抗锯齿形式完成文本呈现。 |
构造方法摘要 | |
---|---|
RenderingHints(Map<RenderingHints.Key,?> init) 构造一个新对象,该对象具有根据指定 Map 对象(可以为 null)初始化的键和值。 |
|
RenderingHints(RenderingHints.Key key, Object value) 构造一个具有指定键/值对的新对象。 |
方法摘要 | |
---|---|
void |
add(RenderingHints hints) 将指定 RenderingHints 对象中的所有键和相应的值添加到此 RenderingHints 对象中。 |
void |
clear() 清除所有键/值对的 RenderingHints 对象。 |
Object |
clone() 创建此 RenderingHints 对象的一个副本,它与此 RenderingHints 对象具有相同的内容。 |
boolean |
containsKey(Object key) 如果此 RenderingHints 包含指定键的映射关系,则返回 true 。 |
boolean |
containsValue(Object value) 如果此 RenderingHints 将一个或多个键映射到指定值,则返回 true。 |
Set<Map.Entry<Object,Object>> |
entrySet() 返回此 RenderingHints 中所包含映射关系的 Set 视图。 |
boolean |
equals(Object o) 对指定的 Object 与此 RenderingHints 进行相等性比较。 |
Object |
get(Object key) 返回指定键所映射的值。 |
int |
hashCode() 返回此 RenderingHints 中的哈希码值。 |
boolean |
isEmpty() 如果此 RenderingHints 未包含键-值映射关系,则返回 true 。 |
Set<Object> |
keySet() 返回此 RenderingHints 中所包含键的 Set 视图。 |
Object |
put(Object key, Object value) 将指定 key 映射到此 RenderingHints 对象中指定的 value 。 |
void |
putAll(Map<?,?> m) 将指定 Map 中所有映射关系复制到此 RenderingHints 中。 |
Object |
remove(Object key) 从此 RenderingHints 对象中移除键和它所对应的值。 |
int |
size() 返回此 RenderingHints 中的键-值映射关系数。 |
String |
toString() 返回 hashmap 的一个相当长的字符串表示形式,该 hashmap 包含此 RenderingHints 对象的键或值的映射关系。 |
Collection<Object> |
values() 返回此 RenderinHints 中所包含键的 Collection 视图。 |
从类 java.lang.Object 继承的方法 |
---|
finalize, getClass, notify, notifyAll, wait, wait, wait |
字段详细信息 |
---|
public static final RenderingHints.Key KEY_ANTIALIASING
ANTIALIASING
提示控制
Graphics2D
对象的几何形状呈现方法是否将尝试沿形状的边缘减少锯齿现象。
典型抗锯齿算法的工作方式如下:根据估计的部分形状像素覆盖率,沿形状的边界将像素的现有颜色与所请求的填充绘制 (fill paint) 混合在一起。
此提示允许的值有
public static final Object VALUE_ANTIALIAS_ON
KEY_ANTIALIASING
public static final Object VALUE_ANTIALIAS_OFF
KEY_ANTIALIASING
public static final Object VALUE_ANTIALIAS_DEFAULT
KEY_ANTIALIASING
public static final RenderingHints.Key KEY_RENDERING
RENDERING
提示是一个提供高级建议的常规提示,目的是在进行评估权衡时提示是应该选择更偏重于速度,还是选择更偏重于质量的算法。任何呈现或图像处理操作都可以参考此提示,但是决定通常会遵照其他优先于此提示的更明确的提示。
此提示允许的值有
public static final Object VALUE_RENDER_SPEED
KEY_RENDERING
public static final Object VALUE_RENDER_QUALITY
KEY_RENDERING
public static final Object VALUE_RENDER_DEFAULT
KEY_RENDERING
public static final RenderingHints.Key KEY_DITHERING
DITHERING
提示控制着在将颜色存储到颜色分辨率受限制的目标中时,所选颜色的近似程度。
一些呈现目标支持的颜色选择数可能受到限制,它也许无法准确地表示在呈现操作过程中产生的颜色的完整色谱。对于这类目标,DITHERING
提示控制着是否使用最接近于所请求的受支持颜色的单个像素值的普通固定填充方式来完成呈现,或者是否使用组合的颜色模式来填充形状,以便更好地接近于该颜色。
此提示允许的值有
public static final Object VALUE_DITHER_DISABLE
KEY_DITHERING
public static final Object VALUE_DITHER_ENABLE
KEY_DITHERING
public static final Object VALUE_DITHER_DEFAULT
KEY_DITHERING
public static final RenderingHints.Key KEY_TEXT_ANTIALIASING
TEXT_ANTIALIASING
提示可以控制文本抗锯齿算法的使用,这与形状呈现的选择无关。通常,应用程序只希望对文本而不是其他形状使用抗锯齿。此外,用于减少文本锯齿现象的算法通常比那些为常规呈现而开发的算法更复杂,所以,此提示键提供了其他一些值,这些值可以控制某些特定于文本的算法的选择。如果保持在
DEFAULT
状态下,此提示通常遵从常规
KEY_ANTIALIASING
提示键的值。
此提示允许的值有
VALUE_TEXT_ANTIALIAS_ON
VALUE_TEXT_ANTIALIAS_OFF
VALUE_TEXT_ANTIALIAS_DEFAULT
VALUE_TEXT_ANTIALIAS_GASP
VALUE_TEXT_ANTIALIAS_LCD_HRGB
VALUE_TEXT_ANTIALIAS_LCD_HBGR
VALUE_TEXT_ANTIALIAS_LCD_VRGB
VALUE_TEXT_ANTIALIAS_LCD_VBGR
public static final Object VALUE_TEXT_ANTIALIAS_ON
KEY_TEXT_ANTIALIASING
public static final Object VALUE_TEXT_ANTIALIAS_OFF
KEY_TEXT_ANTIALIASING
public static final Object VALUE_TEXT_ANTIALIAS_DEFAULT
KEY_ANTIALIASING
提示或由实现选择的默认值完成文本呈现。
KEY_TEXT_ANTIALIASING
public static final Object VALUE_TEXT_ANTIALIAS_GASP
VALUE_TEXT_ANTIALIAS_ON
或
VALUE_TEXT_ANTIALIAS_OFF
。
TrueType 字体通常在 'gasp' 表中提供此信息。在没有此信息的情况下,特定字体和大小的行为由实现默认值确定。
注:字体设计者通常慎重地针对大多数普通用户界面的点大小提示某一种字体。因此,'gasp' 表有可能指定只针对这些大小而不是所有大小使用提示。所以,在许多情况下,得到的文本显示等效于 VALUE_TEXT_ANTIALIAS_OFF
。这可能无法预料,但它是正确的。
出于一致性目的,由多种物理字体组成的逻辑字体将使用最适合于总体复合字体的设置。
KEY_TEXT_ANTIALIASING
public static final Object VALUE_TEXT_ANTIALIAS_LCD_HRGB
注:
在选择是否应用任何 LCD 文本提示值时,实现可能考虑多种因素,这些因素包括要求目标的颜色深度至少要为每像素 15 位(即每个颜色分量为 5 位);字体特征(如内嵌位图是否可以产生更好的结果);在显示到非本地网络显示设备时,是否只在有合适的协议可用时才启用它;如果执行非常高的分辨率呈现或目标设备不合适时(如打印时),是否忽略提示。
这些提示在呈现到软件图像时同样可以应用,但这些图像可能不适合于常规导出,因为文本将针对特定子像素组织进行适当地呈现。此外,有损失的图像和图像格式(如颜色受到限制的 GIF)不是一个好选择。所以,除非图像注定要在具有相同配置的显示设备上呈现,否则,其他一些文本抗锯齿提示(如 VALUE_TEXT_ANTIALIAS_ON
)也许是更好的选择。
在使用时选择与 LCD 显示器不匹配的值可能导致文本质量的下降。在不具备与 LCD 显示器相同特征的显示设备(即 CRT)上,整体效果可能类似于标准文本抗锯齿,但质量可能因颜色失真而降低。模拟连接的 LCD 显示器也没有表现出比标准文本抗锯齿更好的地方,类似于 CRT。
换句话说,为了得到最好的结果,需使用带有数字显示连接器的 LCD 显示器并指定合适的子像素配置。
KEY_TEXT_ANTIALIASING
public static final Object VALUE_TEXT_ANTIALIAS_LCD_HBGR
VALUE_TEXT_ANTIALIAS_LCD_HRGB
。
KEY_TEXT_ANTIALIASING
public static final Object VALUE_TEXT_ANTIALIAS_LCD_VRGB
VALUE_TEXT_ANTIALIAS_LCD_HRGB
。
KEY_TEXT_ANTIALIASING
public static final Object VALUE_TEXT_ANTIALIAS_LCD_VBGR
VALUE_TEXT_ANTIALIAS_LCD_HRGB
。
KEY_TEXT_ANTIALIASING
public static final RenderingHints.Key KEY_TEXT_LCD_CONTRAST
Integer
对象,在与 LCD 文本抗锯齿提示(如
VALUE_TEXT_ANTIALIAS_LCD_HRGB
)一起使用时,它被用于文本对比度调整。
KEY_TEXT_ANTIALIASING
public static final RenderingHints.Key KEY_FRACTIONALMETRICS
FRACTIONALMETRICS
提示控制单个字符字形的定位是否考虑字体的缩放字符 advance 子像素的精确度,或者这类 advance 向量是否舍入为整个设备像素的一个整数数字。此提示只建议定位字形应该使用的精度,而不指定或建议是否应为了匹配而修改实际光栅化或字形的像素边界。
将文本呈现到低分辩率的设备(如屏幕)时没必要包括大量的舍入操作,因为字符字形的形状与规格的高质量和非常精确的定义必须与离散设备像素相匹配。理想情况下,文本布局过程中字形的定位将根据点的大小通过缩放字体的设计规格进行计算,但缩放的 advance with 不必是像素的一个整数数字。如果根据这些缩放的设计规格使用子像素精确度对字形进行定位,则在理想情况下,光栅化需要针对每个可能的子像素原点进行调整。
不幸的是,在文本布局过程中将每个自定义字形缩放到其实际子像素原点的代价太高,所以基于整数设备定位的简化系统通常用于布局文本。字形的光栅化和缩放的 advance with 在设备分辨率上都被调整,以生成看起来很好的文本,在字形之间具有一致的整数像素距离,有助于使字形看起来均匀,有一致性的距离且可读性好。
这种将光栅化字形的 advance with 舍入为整数距离的处理意味着:由于在每个字形调整宽度中一系列小差异的累加,使得字符密度和文本字符串的整体长度不同于理论上设计的测量值。特定差异将针对每种字形而有所不同,与它们的理论设计测量值相比,一些字形比较宽,而另一些字形较窄。因此,字符密度和长度中的整体差异将因许多因素的不同而有所不同,这些因素包括字体、作为目标的特定设备分辨率以及为表示要呈现的字符串而选择的字形。因此,对整个字符串而言,在多个设备分辨率中呈现同一个字符串可能出现很多不同的规格。
当启用 FRACTIONA