问题标签 [highdpi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2027 浏览

c++ - 在 Qt5 中为高 DPI 缩放图像的最佳方法是什么?

我们的应用程序中有各种图像(从 QLabel 中的 QPixmap 显示)在非高 DPI 屏幕上以合理的尺寸显示,但在高 DPI 屏幕上会缩小。其他 UI 元素看起来不错。

我查看了 devicePixelRatioF() 函数,但它始终返回 1。在我的系统上,我启用了 150% 的缩放,所以如果我将 1.5 硬编码为比例因子,则图像相对于窗口具有预期的尺寸。问题是,我怎样才能获得系统比例因子,以便使应用程序在具有不同 DPI / 缩放比例的系统中看起来一致?与 Windows 一样,该应用程序也是为 Linux 构建的。

我会很感激任何建议。

0 投票
1 回答
6260 浏览

c# - DPI 感知 - 一个版本不感知,另一个版本感知系统

所以我们有这个非常奇怪的问题。我们的应用程序是一个 C#/WinForms 应用程序。在我们的 6.0 版本中,我们的应用程序不支持 DPI。在我们的 6.1 版本中,它突然变得可以识别 DPI。
在 6.0 版本中,如果您以高 DPI 运行它,它会使用 Windows 位图缩放,这很好,因为这不会影响屏幕布局。在 6.1 版本中,由于某种原因它可以识别 DPI,因此用户界面被破坏了。
我们现在无法解决这个问题。我们有数百个屏幕,所以要让它们在 DPI 感知模式下正常工作需要很多时间。

我们已经使用 SysInternals Process Explorer 确认了这一点。在我们的 6.0 版本中,它显示Unaware,但在我们的 6.1 版本中,它最初显示Unaware,但随后更改为System Aware
后者发生在代码从 EXE 进入包含我们所有用户界面代码的程序集 DLL 时(我们的 EXE 基本上是一个非常薄的外壳;它实际上所做的只是在我们的表示层程序集上调用一个 Controller 类。)

我们已确认以下内容:

  • 两个版本均使用 VSS 2017 在发布模式下构建。
  • 两个版本都针对相同的 .NET Framework (4.5)
  • 两个版本都使用相同的 DevExpress 版本。
  • 两个版本具有相同的应用程序清单,但未启用 DPI 感知设置。
  • 这两个版本都没有调用任何与 DPI 相关的 Windows API。
  • 使用 Sys Internals 和一些消息框,我们确定了 6.1 版本在什么时候意识到(Presentation 程序集的入口点)以及在那个时候加载了哪些 DLL(我们的、DevExpress、其他依赖项),然后我们构建了一个小的虚拟应用程序引用相同的 DLL,并确认它们已加载。该虚拟应用程序不会感知 DPI。
  • 我们已经比较了两个版本之间的主要 csproj 文件,并且没有有意义的差异。
    • 这两个版本都没有引用 WPF 中的任何内容。

我们不明白为什么我们的 6.1 版本突然变得支持 DPI。我们不知道还有什么可以看的,我们需要一个修复程序,将这个版本恢复到 DPI 不感知模式。它阻碍了我们的发布。真的很感激任何指示。在这一点上,我们愿意尝试任何事情。

0 投票
0 回答
469 浏览

c# - 调试高 dpi winforms 项目时控制大小变化

目前我正在研究高 dpi Windows 窗体应用程序。我使用分辨率为 3840x2160 且缩放比例为 150% 的显示器。

我从 Windows 中获取了高 dpi 示例应用程序。我发现如果我调试示例应用程序并向构造函数头设置断点并将其添加SystemFonts.DefaultFont到监视列表中,它会破坏布局。我不知道为什么会这样。

参见 windows 示例应用程序 (1)

断点

关注列表

Windows 示例应用程序 (2)

我希望我没有忘记提及任何重要的事情。提前感谢您的回答和帮助!

0 投票
1 回答
386 浏览

windows - SystemParametersInfoForDPI 损坏内存

我正在尝试将新的 SystemParametersInfoForDPI 函数用于高 DPI 应用程序。但是,当我返回调用者时,我的应用程序立即崩溃(致命错误)。

尝试执行 00000000 时异常是访问冲突。

我试图获取的参数是 SPI_GETNONCLIENTMETRICS。

怎么了?

0 投票
1 回答
776 浏览

android - Qt 应用程序中的高 dpi 缩放使图标变得平滑

我在我的 Qt 应用程序中启用了高 dpi 支持,QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);但现在我的图像看起来不清晰,而是看起来“平滑”了。例如,下面有一些按钮的图片,这些按钮旨在使用高 dpi 图像。当我禁用高 dpi 支持并手动缩放 ui 时,使用相同的图像,图标清晰明了。

在此处输入图像描述

我试图设置Qt::AA_UseHighDpiPixmaps没有成功。这是一个示例代码:

我使用的图标来自谷歌材料设计图标,它是为高 dpi 屏幕设备制作的(分辨率为 192x192)。启用高 dpi 工具按钮中的图标会显得平滑。icon.height如果我禁用高 dpi 支持并将图标 (和icon.width)的高度和宽度设置为640/160 * 48(640是我设备的 dpi ),则图标清晰明了。但是,如果我启用高 dpi 并将高度和宽度设置为48,则图标不清晰。

0 投票
2 回答
1568 浏览

delphi - Delphi 应用程序的 DPI 不高(虽然清单看起来不错)

我无法让我的 Delphi (10.1 Berlin Update 2) 应用程序在 Windows 10 的高 DPI 下正常运行,2018 年 4 月更新。默认情况下,整个应用程序是模糊的(由操作系统缩放),但如果我将 DPI 设置(exe 的属性)更改为“应用程序”,它的行为正确。我的可执行文件的清单文件如下所示:

此清单在 DPR 中使用{$R 'app.res' 'app.rc'},资源文件仅包含一行:

我不想在运行时做任何事情,而是让清单决定 DPI 缩放。任何人都可以为我提供一个解决方案来防止 Windows 以高 DPI 缩放我的应用程序吗?

0 投票
1 回答
375 浏览

winapi - WM_DPICHANGED 在循环中调用,大小未从 WM_GETDPISCALEDSIZE 返回

我试图让我们的 WinAPI 应用程序支持 DPI,并遇到了一个明显的无限循环,其中窗口不断接收 WM_DPICHANGED。如文档所述,该程序始终使用 WM_DPICHANGED 消息的 lParam 调用 SetWindowPos。

我的显示器设置在右侧有显示器 1,1920x1080,100% 缩放,左侧有显示器 2,在底部对齐,3840x2160,150% 缩放。运行以下程序,移动窗口,使其横跨两个显示器,但缩放为 100%。现在,抓住左侧显示器上的窗口,垂直上下移动窗口,使其在两种分辨率之间切换。在某些时候,它进入一个似乎停止整个窗口管理器的循环(ctrl-alt-del 会中断它——不需要实际终止程序)。

在这个循环中,传入 lParam 的矩形的大小为 500x500,用于 96 和 144 DPI!为什么 WM_DPICHANGED 得到一个大小不是从 WM_GETDPISCALEDSIZE 返回的矩形?

我知道我在做一些不寻常的事情,让窗口在更高 DPI 显示器上变小(在真实的应用程序中,我们的窗口具有复杂的布局,这些布局会根据分辨率而变化)。

为什么会出现这种循环,我们如何避免 DPI 更改循环?

0 投票
1 回答
121 浏览

highdpi - 图标大小在更高 DPI 中没有增加

我在 DPI 大于 100 时遇到了这个问题。我更改了图标的大小,例如粗体、斜体,当我以 100 dpi 运行程序时,图标大小更大,但是当我在更改为 dpi 后运行程序时大于 100 图标越来越小,并且没有更新到任何大小值。我试过 autosize = false,图像缩放到无。

0 投票
0 回答
682 浏览

macos - 使用 SDL 和 OpenGL 在 MacOS 上正确处理 HighDPI

我在 MacOS 上为我的游戏Bitfighter进行高 DPI 渲染的尝试总是看起来很糟糕,就像低分辨率游戏的放大版本一样。

游戏使用 SDL2 + OpenGL,我已正确启用SDL_WINDOW_ALLOW_HIGHDPI窗口标志,并在 Info.plist 中使其具有 HighDPI 感知能力。这一切都有效,我得到了更高分辨率的标题栏。我使用SDL_GL_GetDrawableSize它并正确返回比窗口大小大 2 倍的像素大小,但以下重新缩放它的技术不会产生好的结果:

  • 使用glViewport窗口坐标
  • 使用glViewport可绘制坐标,然后glOrtho进行缩放(如 SDL doc 中所建议README-ios.md

两者都显示像素矢量图形。我可以做些什么来让 OpenGL 在 MacOS 高 DPI 下更好地绘制?

谢谢。

0 投票
2 回答
4231 浏览

java - Java Swing 应用程序在应该缩放到正常大小时在高 DPI 屏幕上看起来很小

如何使我的 Java Swing 应用程序 GUI 在高 DPI 屏幕上正确缩放给用户?

请参阅下面的屏幕截图。在顶部,您可以看到与 Ubuntu 的文件浏览器图标和 gedit 相比,该应用程序看起来多么小。在左下角,您可以大致看到应用程序的大小(并且在常规 DPI 监视器上看起来确实如此)。因此,我正在寻找一种在使用高 DPI 监视器时正确缩放应用程序 GUI 的方法。例如,gedit 在常规 DPI 和高 DPI 显示器上看起来是一样的。我希望我的应用程序表现得像这样。

在此处输入图像描述

这是应用程序的源代码:https ://github.com/baobabKoodaa/baopass

这是影响许多应用程序的极其常见的问题。我在 Ubuntu 上运行的大约一半的应用程序在没有用户任何操作的情况下正确缩放,另一半没有缩放并且看起来非常小。请注意,我主要是在寻找不需要用户操作的解决方案(尽管此时感谢任何帮助 - 我根本没有找到任何扩展它的方法)。

根据这个缩放应该已经可以开箱即用了。它没有。我不确定这是否是一个错误,或者除了在 Java 9 上运行应用程序之外,我还应该做一些额外的步骤吗?