【问题标题】:How to scale program to correct screen resolution?如何缩放程序以正确的屏幕分辨率?
【发布时间】:2012-10-26 19:16:22
【问题描述】:

在接下来的四十分钟内,我将在我的大学举办一场音乐会,我将在几个不同的屏幕上投影我编写的全屏应用程序。我今晚只能使用投影系统,当插入屏幕时,我的屏幕分辨率发生了巨大变化,但是当我执行我的程序时,它就像使用我的旧屏幕分辨率一样工作。我已经将整个视觉显示编码为精确的像素值,但现在有一半没有显示,因为它被推离了屏幕的一侧。我尝试在系统偏好设置中手动更改我的显示,但没有效果。我尝试创建不同的显示模式以适应分辨率,但我不断收到消息 UnsupportedOperationException:无法更改显示模式。无论如何我可以将我的程序缩放到正确的大小或更改为正确的显示模式吗?

下面是我用来初始化全屏的代码:

            frame = new display();
            canvas = new Canvas();
            canvas.addKeyListener(this);
            frame.setUndecorated(true);
            frame.getContentPane().add(canvas);
            strategy = canvas.getBufferStrategy();
            environment = GraphicsEnvironment.getLocalGraphicsEnvironment();
            device = environment.getDefaultScreenDevice();
            oldDisplay = device.getDisplayMode();
try {
            device.setFullScreenWindow(frame);
            newDisplay = new DisplayMode(1440, 900, 60, 60);
            device.setDisplayMode(newDisplay);
catch (Exception ex) { }
            canvas.requestFocus();
            canvas.setFocusTraversalKeysEnabled(false);
            frame.setVisible(true);
            canvas.createBufferStrategy(2);
            strategy = canvas.getBufferStrategy();

Display 只是 JFrame 的直接扩展。

如果我没有完成这项工作,我的学位课程的这个模块就会失败。请stackoverflow现在不要让我失望!谢谢!

编辑:FIXED EXCEPTION 然而,尽管设置了 800、600、60、60,但程序似乎根本没有改变分辨率。

【问题讨论】:

  • 如果您为特定分辨率设计了应用程序,那么我怀疑您真的能做些什么。您唯一的“真正”机会是尝试添加 AffineTransform 以将图形从您设计的分辨率缩小到预期的分辨率,但您需要将其添加到您的绘图例程中。

标签: java


【解决方案1】:

我的解决方案不是 OP 正在考虑的问题。但我相信它可以解决您的问题。

抓取 VirtualBox(或任何其他支持缩放模式的虚拟机)。花 20 分钟在上面安装一个操作系统,然后在其中运行你的程序。许多 VM 支持缩放模式,即来宾操作系统会认为它正在运行分辨率 X1*Y1,但在您的屏幕上,它实际上显示为 X2*Y2,由 VM 缩放。因此,您可以让您的程序在任何分辨率下都能正常显示。

【讨论】:

    【解决方案2】:

    您可以将 DisplayMode 降低到大多数投影仪都支持的 (1024, 768, 60, 60)。最坏的情况,将其降低到 800、600、60、60 - 但是,在画布上绘制的任何硬编码像素值超出 DisplayMode 范围的内容都不会再出现在屏幕上。

    【讨论】:

    • 已更改。然而,即使在 800,600,60,60 似乎也没有明显的变化。
    猜你喜欢
    • 1970-01-01
    • 2016-07-27
    • 2016-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 2015-04-24
    • 1970-01-01
    相关资源
    最近更新 更多