快速业务通道

Merlin的魔力: 练习完全控制图形显示 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
d!”的全屏幕窗口。该示例显示新显示方式的特征,这样您可以看到特定的屏幕大小、刷新频率和色深(bit depth)。

清单 5. 方式更改示例

import java.awt.*; import javax.swing.*; import java.util.Random; public class DisplayModes {   public static void main(String args[]) {    GraphicsEnvironment graphicsEnvironment =     GraphicsEnvironment.getLocalGraphicsEnvironment();    GraphicsDevice graphicsDevice =     graphicsEnvironment.getDefaultScreenDevice();    DisplayMode displayModes[] = graphicsDevice.getDisplayModes();    DisplayMode originalDisplayMode = graphicsDevice.getDisplayMode();    JWindow window = new JWindow() {     public void paint(Graphics g) {      g.setColor(Color.blue);      g.drawString("Hello, World!", 50, 50);     }    };    try {     if (graphicsDevice.isFullScreenSupported()) {      graphicsDevice.setFullScreenWindow(window);     }     Random random = new Random();     int mode = random.nextInt(displayModes.length);     DisplayMode displayMode = displayModes[mode];     System.out.println(displayMode.getWidth() + "x" +      displayMode.getHeight() + " \t" + displayMode.getRefreshRate() +      " / " + displayMode.getBitDepth());     if (graphicsDevice.isDisplayChangeSupported()) {      graphicsDevice.setDisplayMode(displayMode);     }     Thread.sleep(1000);    } catch (InterruptedException e) {    } finally {     graphicsDevice.setDisplayMode(originalDisplayMode);     graphicsDevice.setFullScreenWindow(null);    }    System.exit(0);   } }

Merlin的魔力: 练习完全控制图形显示(3)

时间:2011-02-02 IBM John Zukowski

全屏幕呈现

请注意:在清单 5 中,用于全屏幕的窗口包括了十分有用的 paint() 方法。然而,因为窗口处于全屏幕方式,所以 paint() 方法所需的开销、该方法如何处理剪裁以及其它与显示处理相关的行为都是不必要的。实际上,已经证明了标准的被动呈现开销太大,它减慢了全屏幕应用程序的速度。例如,您不必处理如重叠窗口或调整窗口大小之类的任务。而是可以采取更主动的方法,创建一个处理呈现窗口本身的紧凑循环(tight loop)。

如果您熟悉 双缓冲,那么您知道它在内存中管理两个 Image 对象,并根据哪个对象拥有 当前的显示信息来在这两个对象之间进行交换。在一个 Image 显示的同时,您绘制另一个 Image 并在各个“场景”之间交换 Image 对象。

显卡利用了类似的概念,但不是使用实际的 Java Image 对象,而是交换内存页。当交换内存页时显示就发生更改,所以您不需要将 Image 对象从程序内存复制到显示内存;您只要更改视频指针,显示就会发生更改。尽管现在双缓冲概念仍然存在,但已不是对程序空间中的 Image 进行写操作,而是直接绘制到显示内存空间。

BufferStrategy 类隐藏了使用的是上述两种双缓冲方法中的哪一种这一事实,并且它允许您利用系统所提供的任何基于硬件的缓冲。要创建 BufferStrategy ,使用 createBufferStrategy() 方法告诉系统您所期望的缓冲区数目,并使用 getDrawGraphics() 方法在缓冲区之间进行交换,该方法返回下一个要使用的缓冲区。从概念上讲仅此而已,但如清单 6 所示,工作代码需要花更多的精力:

清单 6. 使用 BufferStrategy

JFrame frame = ...   f

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号