当前位置:网站首页 > Java教程 > 正文

java graphics2d 教程



此类扩展了类,以提供对几何,坐标转换,颜色管理和文本布局的更复杂控制。 这是在Java(tm)平台上渲染二维形状,文本和图像的基础类。 传递给对象的所有坐标都在一个名为User Space的设备无关坐标系中指定,该系统由应用程序使用。 对象包含对象作为其呈现状态的一部分,该对象定义如何将设备空间中的坐标从用户空间转换为设备相关坐标。

设备空间中的坐标通常指的是单个设备像素,并且在这些像素之间的无限薄间隙上对齐。 一些对象可用于捕获渲染操作以存储到图形元文件中,以便稍后在具有未知物理分辨率的具体设备上回放。 由于在捕获渲染操作时可能不知道分辨率,因此设置为将用户坐标转换为近似于目标设备的预期分辨率的虚拟设备空间。 如果估计不正确,可能需要在回放时应用进一步的转换。

渲染属性对象执行的某些操作发生在设备空间中,但所有方法都采用用户空间坐标。

每个对象都与一个目标相关联,该目标定义了渲染的位置。 对象定义渲染目标的特征,例如像素格式和分辨率。 在对象的整个生命周期中使用相同的渲染目标。

当创建一个目的, 指定default transform为目标 (一个或 )。 该默认变换将用户空间坐标系映射到屏幕和打印机设备坐标,使得原点映射到设备的目标区域的左上角,增加的X坐标向右延伸并且增加的Y坐标向下延伸。 默认转换的缩放设置为接近72 dpi的设备的标识,例如屏幕设备。 对于高分辨率设备(例如打印机),默认变换的缩放设置为每平方英寸约72个用户空间坐标。 对于图像缓冲区,默认转换是转换。

渲染过程可以分为四个阶段,由渲染属性控制。 渲染器可以优化许多这些步骤,或者通过缓存未来调用的结果,将多个虚拟步骤折叠成单个操作,或者通过将各种属性识别为可以通过修改操作的其他部分来消除的常见简单情况。

渲染过程中的步骤是:

  1. 确定要渲染的内容。
  2. 将渲染操作约束到当前的 。 该由指定在用户空间中,并通过使用各种夹操作方法的程序控制和 。 用户剪辑由当前转换为设备空间,并与设备剪辑组合, 设备剪辑由窗口和设备范围的可见性定义。 用户剪辑和设备剪辑的组合定义了复合剪辑 ,它决定了最终裁剪区域。 渲染系统不会修改用户剪辑以反映生成的复合剪辑。
  3. 确定要渲染的颜色。
  4. 使用上下文中的当前属性将颜色应用于目标绘图表面。

三种类型的渲染操作以及每种渲染过程的详细信息如下:
  1. operations
    1. 如果该操作是一个操作,则上的当前方法在属性被用于上下文构造新对象包含指定的轮廓 。
    2. 使用上下文中的当前从用户空间转换为设备空间。
    3. 所述的轮廓被使用所提取的的方法 ,它返回一个对象迭代沿的边界 。
    4. 如果对象不能处理弯曲区段,所述对象返回然后它可以调用备用的方法 ,其展平了 。
    5. 上下文中的当前被查询为 ,其指定要在设备空间中呈现的颜色。
  2. Text operations
    1. 以下步骤用于确定呈现指示的所需的字形集:
      1. 如果参数是 ,那么当前在背景下被要求在中的Unicode字符转换与任何基本布局和成形算法的字体工具为一组字形的呈现。
      2. 如果参数是 ,则要求迭代器使用其嵌入的字体属性将自身转换为 。 实现了更复杂的字形布局算法,可以针对不同书写方向的多种字体自动执行Unicode双向布局调整。
      3. 如果参数是 ,则对象已包含适当的字体特定字形代码,并且每个字形的位置都有显式坐标。
    2. 查询当前的以获取指示的字形的轮廓。 这些轮廓被视为用户空间中的形状,相对于在步骤1中确定的每个字形的位置。
    3. 字符轮廓如上面 operations所示填写 。
    4. 查询当前的 ,它指定要在设备空间中呈现的颜色。
  3. Operations
    1. 感兴趣的区域由源的边界框定义。 此边界框在图像空间中指定,该空间是对象的本地坐标系。
    2. 如果传递给 ,则使用将边界框从图像空间转换为用户空间。 如果未提供 ,则将边界框视为已在用户空间中。
    3. 使用当前的将源的边界框从用户空间转换为设备空间。 请注意,转换边界框的结果不一定会导致设备空间中的矩形区域。
    4. 对象确定要渲染的颜色,根据当前指定的源到目标坐标映射和可选的图像变换进行采样。
渲染属性的默认值为:
的颜色。
的 。
方形笔,线宽为1,无划线,斜接段连接和方形端盖。
为的 。
规则。
无渲染 ,输出被剪切到 。
JDK(tm)1.1渲染模型基于像素化模型,该模型指定坐标在像素之间无限薄。 使用一个像素宽的笔来执行绘制操作,该笔填充路径上的锚点下方和右侧的像素。 JDK 1.1渲染模型与大多数现有类平台渲染器的功能一致,这些渲染器需要将整数坐标解析为必须完全落在指定像素数上的离散笔。

Java 2D(tm)(Java(tm)2平台)API支持抗锯齿渲染器。 与像素N + 1相反,宽度为一个像素的笔不需要完全落在像素N上。 笔可以部分落在两个像素上。 没有必要为宽笔选择偏置方向,因为沿着笔遍历边缘发生的混合使得笔的子像素位置对用户可见。 另一方面,当通过将提示键设置为提示值来关闭抗锯齿功能时,渲染器可能需要应用偏置来确定当笔跨越像素边界时要修改的像素,例如何时沿设备空间中的整数坐标绘制。 虽然抗锯齿渲染器的功能使渲染模型不再需要为笔指定偏置,但是抗锯齿和非抗锯齿渲染器对于绘制一个像素宽的水平和屏幕上的垂直线条。 为了确保通过设置开启抗锯齿提示键到不会导致这些线突然变成两倍宽,一半不透明,最好是有模型指定这样行的一个路径,使它们完全覆盖特定一组像素,以帮助增加他们的脆度。

Java 2D API保持与JDK 1.1呈现行为的兼容性,因此Java 2D API下的旧操作和现有呈现器行为保持不变。 定义了映射到常规和方法的遗留方法,这清楚地表明如何根据和属性的设置以及渲染提示扩展 。 该定义在默认属性设置下执行相同。 例如,默认值是 ,宽度为1且没有 ,屏幕绘制的默认变换是Identity变换。

以下两个规则提供可预测的呈现行为,无论是使用别名还是抗锯齿。

  • 设备坐标定义在设备像素之间,这避免了别名和抗锯齿渲染之间的任何不一致结果。 如果坐标被定义为在像素的中心,则由形状(例如矩形)覆盖的一些像素将仅被覆盖一半。 使用别名渲染时,半覆盖的像素将在形状内或形状外部渲染。 使用抗锯齿渲染时,形状整个边缘上的像素将被覆盖一半。 另一方面,由于坐标被定义为在像素之间,因此像矩形的形状将不具有半覆盖的像素,无论是否使用抗锯齿来渲染。
  • 使用对象描边的线和路径可以“标准化”,以便在定位在可绘制的各个点上时提供轮廓的一致渲染,以及是否使用别名或抗锯齿渲染进行绘制。 此标准化过程由提示控制。 没有指定精确的归一化算法,但是这种归一化的目标是确保线条以一致的视觉外观呈现,无论它们如何落在像素网格上,并在抗锯齿模式下促进更加坚固的水平和垂直线条,使它们类似他们的非抗锯齿对应物更紧密。 典型的归一化步骤可以将抗锯齿线端点提升到像素中心以减少混合量或调整非抗锯齿线的子像素定位,使得浮点线宽度以相等的可能性舍入到偶数或奇数像素计数。 此过程可以将端点移动最多半个像素(通常沿两个轴向正无穷大),以促进这些一致的结果。

以下对常规遗留方法的定义与默认属性设置下先前指定的行为完全相同:

  • 对于操作,包括 , , , , ,并 , ,现在可以与所需称为 。 例如,填充矩形时:
     fill(new Rectangle(x, y, w, h)); 
    叫做。
  • 同样,对于平局操作,包括 , , , , , ,并 , ,现在可以与所需称为 。 例如,绘制矩形时:
     draw(new Rectangle(x, y, w, h)); 
    叫做。
  • 该个方法是在条款实施种方法在类会在当前谓语他们的行为个的对象上下文。 此类使用当前版本覆盖那些实现,覆盖当前的 ,并使用来描述与先前存在的方法完全相同的行为,而不管当前的设置 。
类仅定义方法来控制要绘制的颜色。 由于Java 2D API扩展了对象以实现新的接口,因此现有的方法现在是将当前属性设置为对象的便捷方法。 相当于 。

类定义了两种控制颜色应用于目标的方法。

  1. 方法实现为一种方便的方法来设置默认值 ,相当于 。
  2. 方法实现为一种方便的方法来设置一个特殊的对象,该对象忽略源颜色的组件并将目标颜色设置为值:
     dstpixel = (PixelOf(srccolor) ^ PixelOf(xorcolor) ^ dstpixel); 

  • 上一篇: java多线程高级教程
  • 下一篇: Java 教程 在线
  • 版权声明


    相关文章:

  • java多线程高级教程2025-01-02 11:50:04
  • java教程37句2025-01-02 11:50:04
  • java教程4562025-01-02 11:50:04
  • eclipse版本JAVA教程2025-01-02 11:50:04
  • java199教程2025-01-02 11:50:04
  • Java 教程 在线2025-01-02 11:50:04
  • java 391集教程2025-01-02 11:50:04
  • java图形化界面教程2025-01-02 11:50:04
  • java 网站示例教程2025-01-02 11:50:04
  • java页面布局教程2025-01-02 11:50:04