现在的位置: 首页 > 综合 > 正文

java2D 图形设备

2018年03月23日 ⁄ 综合 ⁄ 共 2662字 ⁄ 字号 评论关闭
 
   

同环境交互 第 1 页(共4 页)

Java 2D 的出现使得必须创建一些附加类,这些类将允许程序员以一种平台中立的方式访问特定于环境的信息。这一章对这些类做了概述。

GraphicsEnvironment 类 第 2 页(共4 页)

开发 Java 2D 时,考虑了平台中立性,这意味着:当应用程序运行于不同硬件环境上时,必须有一些方法供图形程序来了解操作环境的能力。而且,还需要一种机制供 GUI 程序发现可以获得什么输出设备以供显示,以及确定系统上可以获得什么字体资源。GraphicsEnvironment 类为这些目的服务。

GraphicsEnvironment 是一个抽象类,可以在 java.awt 包中找到。它具有一个静态方法 getLocalGraphicsEnvironment(),该方法返回适合于图形开发人员使用的 GraphicsEnvironment 实例。


GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();

可以使用这一引用,例如用来检索 JVM 可访问的可用字体库名称。它替代了 java.awt.Tookit 中受到批评的 getFontList() 方法:


    GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
    String[] fontNames = env.getAvailableFontFamilyNames();
    for (int k=0; k < fontNames.length; k++)
        System.out.println(fontNames[k]);

还提供了该方法的另一种版本,该版本获取 Locale 对象作为参数。此版本允许用户检索特定于特定区域的字体。

GraphicsEnvironment 还有一种名为 getAllFonts() 的方法,它检索一个 java.awt.Font 对象数组,其中的每个对象对应于系统上安装的一种字体类型。建议不要使用该方法,因为那会导致付出高昂的性能代价,而这一代价会随目标平台上的字体的增加而增加。

 

 

GraphicsDevice 类 第 3 页(共4 页)

一旦获得了 GraphicsEnvironment,程序员就可以用它来查询可用的输出设备的数量和类型。调用 GraphicsEnvironment 实例上的 getDefaultScreenDevice() 方法会返回一个 GraphicsDevice 实例,这个实例通常表示主要的图形输出设备 ― 屏幕。如果工作站装备了多个物理屏幕,那么每个设备都可以被独立处理。GraphicsEnvironment 方法 getScreenDevices() 返回一组 GraphicsDevice 对象 ― 其中的每个对象表示一个连接到系统的屏幕。

GraphicsDevice 有两个信息特性。每个设备都有一个可由 getIDString() 方法访问的名称以及一个由 getType() 方法检索的类型。设备类型将总是下列值和相关意义之一:

  • GraphicsDevice.TYPE_RASTER_SCREEN:设备是监视器。
  • GraphicsDevice.TYPE_PRINTER:设备是打印机。
  • GraphicsDevice.TYPE_IMAGE_BUFFER:允许在内存中进行绘制操作的“虚拟”设备。(用户不能查看该设备类型。)

大多数输出设备有多种不同显示方式。监视器和视频适配器可以用不同数目的可用颜色显示不同的屏幕分辨率。打印机也可以提供包括方向和打印质量在内的许多打印选项。图形设备可供使用的各种方式封装在另一个对象 GraphicsConfiguration 中。

 

GraphicsConfiguration 类 第 4 页(共4 页)

GraphicsConfiguration 类表示 GraphicsDevice 的一种操作方式。该类的实例依次从 GraphicsDevice 实例检索。可以通过调用 getDefaultConfiguration() 来检索任何设备的缺省配置,但可以使用 getConfigurations() 方法从 GraphicsDevice 检索一组 GraphicsConfiguration 对象。


    GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
    GraphicsDevice defaultDevice = env.getDefaultScreenDevice();
    GraphicsConfiguration[] configs = defaultDevice.getConfigurations();
    for (int z=0; z < configs.length; z++)
        System.out.println(configs[z]);

上述代码(在我的机器上)产生下列输出:


> Win32GraphicsConfig[dev=Win32GraphicsDevice[screen=0],pixfmt=1]
> Win32GraphicsConfig[dev=Win32GraphicsDevice[screen=0],pixfmt=2]
> Win32GraphicsConfig[dev=Win32GraphicsDevice[screen=0],pixfmt=5]
> Win32GraphicsConfig[dev=Win32GraphicsDevice[screen=0],pixfmt=6]
> Win32GraphicsConfig[dev=Win32GraphicsDevice[screen=0],pixfmt=9]
> Win32GraphicsConfig[dev=Win32GraphicsDevice[screen=0],pixfmt=10]

pixfmt 特性表示颜色深度;也就是,使用多少位来表示特定的颜色。使用的位越多,可被显示的颜色就越多。随着颜色深度增加,软件性能会相应地下降,因为表示每个像素所需的物理内存和虚拟内存的数量会更大。

GraphicsConfiguration 类有另外一种重要用途,这种用途同缓冲的图像的使用有关。特别地,如果用户想创建同特定 GraphicsConfiguration 兼容的 BufferedImage,那么可以使用 createCompatibleImage() 方法。程序员提供所希望的缓冲区图像的高度、宽度和透明度。



抱歉!评论已关闭.