问题标签 [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.
qt - 带有 SVG 的 QIcon 显示为黑色
我需要使用我的 Qt 5.9.1 应用程序支持高 DPI 显示,我正在寻找一种解决方案来扩展应用程序使用的 QIcon。
我目前只针对 Windows 7 和 10。
到目前为止,对于非高 DPI 显示器(Windows 7),我使用 .ico 文件来显示以不同分辨率显示的图标。
当它们仅以单一分辨率使用时,我也有一些图标作为 .png 文件。
对于高 DPI 显示器,在 Windows 10 下,当用户应用缩放应用程序的缩放因子时,图标最终会缩放但模糊。
我已经测试过添加以“@2x”后缀命名的高分辨率 png 文件,但缩放会使图标变得模糊。
看到这一点,我想我会尝试使用 .svg 文件,因为它们应该可以缩放,但是当与 QIcons 一起使用时它们会显示为黑色。这篇文章暗示 QIcons 不支持“填充”颜色:Qt support for coloring SVG in a QIcon
有没有人设法让 .svg 文件与 QIcons 一起使用?我是否在正确的轨道上使用 .svg 来支持高 DPI 显示并且仍然可以获得清晰的图标?如果没有,人们采取什么方法?
c# - 高 DPI 主屏幕的 HorizontalOffset 方向错误
我目前正在处理我们的 WPF 应用程序中的一些高 DPI 问题(.NET 4.6.1 - 系统 DPI 感知处于活动状态)。
通常,该应用程序会按照我们的预期进行 - 根据当前显示的 DPI 设置进行缩放,当将其从屏幕 A @ 100% 移动到屏幕 B @ 150% 时,它会正确地“在半点”更改其整体比例。
大多数未解决的问题是因为我们有一些基于像素/DIP 的计算没有考虑 DPI 设置。我通过计算正确的 DPI 值来解决这个问题:
在那里我发现了第一件奇怪的事情(至少对我来说):
- 如果主显示器设置为例如 125%,我得到
dpiX
所有屏幕的 1.25,即使是 100% 的辅助屏幕,但所有像素值已经乘以 1.25(意味着 1600x1200 像素屏幕的工作尺寸为 2000x1500) . - 如果主屏幕处于 100% 并且辅助屏幕处于例如 150% 则正好相反:我总是得到 1
dpiX
,但所有值都已经正确并且不需要更正(=> 或乘法/潜水1 不会破坏它)。
但现在我的实际问题是:
我将一些弹出窗口放置在其放置目标的中心,并具有以下绑定:
和转换器:
对于案例 2,如果没有注释掉的代码,一切都已经正常工作,但对于案例 1,我尝试将 DPI 值相乘,但最终正确的做法是将其乘以使其-1
正常工作。
为什么会这样?
我怎样才能有效地检测到什么时候需要呢?dpiX > 1
?
我也对缩放问题或整个中心放置的其他解决方案持开放态度。
PS:我正在运行安装了 .NET 4.7 的 Windows 10 1703(由于某些其他原因,应用程序仍以 4.6.1 为目标)。
更新:
我创建了一个演示解决方案:https
://github.com/chrfin/HorizontalOffsetError
如果主屏幕处于 100% 是正确的:
但如果主屏幕是 125% 则关闭:
但如果我添加*-1 到偏移量再次正确:
...但为什么?
c# - 如何使用 C# 在 macOS 上创建高 dpi 控制台应用程序(如果可能的话)?
我有一个构建分形的简单 c# 控制台应用程序。我在 macOS 上使用 Visual Studio Community。我创建了一个特定大小(wxh)的位图。.SetPixel
根据计算的 mandelbrotnumber,为每个像素分配一个颜色。
这很好用,除了我有一个高 dpi 的视网膜屏幕并且位图看起来非常像素化。
我试过这样的事情:
得到一个dpi,但这只是给我96,这是分辨率,而Form
不是屏幕。
我在创建位图后直接尝试bm.SetResolution(144.0F, 144.0F);
,没有成功。
我尝试了更复杂的方法,比如在这里找到的,但这只会使程序崩溃。可能(?)因为我在 macos 上,所有推荐的建议加载 .dll 的解决方案都[DllImport("user32.dll")]
不起作用:System.DllNotFoundException: user32.dll
。
我尝试添加this.AutoScaleDimensions = new System.Drawing.SizeF(200F, 200F);
到初始化Form
.
即使切换到WPF似乎也是有问题的,如果在 macOS 上什至可能的话。想知道是否有可能使用 C#?
我不需要整个程序来渲染视网膜 dpi,但是逐像素创建位图可能需要另一种方法来获得高分辨率图像?简单地使位图更小,但分辨率更高是可以接受的。当然,最好的解决方案是Form
根据屏幕的可用 dpi 在高 dpi 分辨率下使用几行代码创建完整的应用程序,而无需将整个应用程序重写为
.NET文档真的没用,所以希望这里有人有解决方案。
PS:与其只是对我的帖子投反对票,我更愿意听听对我帖子的批评。它是重复的吗?我很高兴听到我在哪里可以找到答案,已经搜索了几个小时。您需要更多代码吗?乐于提供...
window - 如何确定 Windows 10 上窗口的正确可绘制大小?(SDL2)
我正在开发一个 OpenGL 应用程序。我使用高 dpi 屏幕,Windows GUI 缩放到 125%,以使程序看起来像在常规屏幕上。
如果我使用 SDL2 创建一个 800*600 的窗口,它看起来与常规屏幕中的大小相同,但它是 1000*750 像素。由于我使用延迟渲染,我必须创建与可绘制区域大小相同的缓冲区,所以我想找出窗口的实际大小(以像素为单位)
如果我打电话SDL_GL_GetDrawableSize
,我会错误地得到 800*600 而不是 1000*750。我在创建窗口时添加了标志SDL_WINDOW_ALLOW_HIGHDPI
。
我错了什么?
编辑:
如果我将Visual Studio 中的DPI Awareness更改为Per Monitor High DPI Aware,那么窗口实际上是 800*600,但看起来很小。它应该是 1000*750,因为 Windows 设置中的缩放因子是 125%
delphi - 从 Delphi VCL 应用程序可靠地读取 Windows 缩放因子
在我努力正确处理我的应用程序中的 DPI 更改时,我使用以下代码来读取当前的缩放因子:
我的问题是,无论我在 Windows(Windows 10)中设置什么设置,这总是返回 100(96 dpi)。
我已经使用默认项目设置(即清单文件自动生成,要包括的标签:启用运行时主题和启用高 DPI)编译了我的应用程序。
我还尝试关闭“启用高 DPI”,然后在应用程序中手动启用它(但尝试时出现错误,表明 DPI 模式已设置,但这可能是另一个问题)。
任何人都可以指导我一个方向,让我能够可靠地读取Windows 中设置的当前DPI 比例因子吗?我还需要响应 DPI 更改,但似乎无法拦截 WM_DPICHANGED 消息。我应该在哪里截获此消息?在应用程序级别还是在表单级别?
要重现我的测试设置,请创建一个空的 VCL 应用程序,上面有一个名为 Button1 的按钮。在 FormCreate 事件中,输入以下代码:
将 Button1.OnClick 事件附加到 FormCreate 方法,以便按钮标题在启动时初始化,并在每次单击时刷新。
然后运行应用程序。按钮标题应从 100 开始(如果您以 100% 缩放运行)。然后尝试在 Windows 中更改缩放比例并单击按钮。它应该更改为您选择的值,但(在我的 PC 上)它仍然返回 100%。
清单(从已编译的 .EXE 中提取)如下:
html - 为什么这个 100% 宽度的图像大于屏幕宽度 * 设备像素比
我确定我在这里遗漏了一些东西。
为什么这个 100% 宽度的图像大于window.screen.width * window.devicePixelRatio
如果屏幕宽度等于360px,设备比例为2
这个 100% 宽度的图像不应该等于720px而不是报告的964px
固定宽度图像
此外,如果我放置一个 720 像素的图像,它不会覆盖整个设备宽度???
请注意,这是在我的真实设备上使用的 moto g4 播放器,屏幕分辨率为 720x1280
编辑
当我运行此代码时,如果图像在我的情况下为 964px,则报告的宽度。
这段代码也在这里http://li209-135.members.linode.com/
它应该在移动浏览器中查看。
.net - WinForms 4K 和 1080p 缩放/高 DPI?
所以,这里是这样的场景:我试图让我的所有表单(它们是 Winforms)在 4K 和 1080p(也称为高 DPI 或“dpi-aware”)中看起来不错。我(出于这个问题的目的)具有三种形式:frmCompanyMasterEdit继承自frmBaseEdit继承自frmBase,继承形式System.Windows.Forms.Form。
我尝试了旧方法,通过在清单中使我的应用程序能够识别 DPI:
这样,除了我可以修复的小锚定问题外,表格在 4K 下看起来很完美,看起来就像那样,但在 1080p 下有点模糊。这里是 4K:4K 的新旧方式。
无论如何,所以我从头开始并尝试使用 .NET 4.7 中描述的新方法,针对 4.7 框架并添加以下代码:
到 app.config
到 app.manifest
并从 app.manifest 中取出旧代码,以免覆盖新的 .NET 4.7 方式。我确保将代码放在适当的位置。所以这里的表格在 4K 中看起来不错,如上图,但现在在 1080p 中它非常放大,如下所示: 1080p 新方式
因此,无论哪种方式,除了较小的锚定问题外,该表格在 4k 中看起来很棒,而且它(旧方式)尺寸合适但在 1080p 中有点模糊,或者在 1080p 中不模糊但确实放大了。我也不得不更改所有designer.vb文件中的这两行,如下所示:
我不知道为什么我无法让它在 1080p 中看起来合适。就像我说的,我的目标是 4.7 .NET 框架。我在适当版本的 Windows 10(版本 1709 / Creator's edition)上运行。1080p 以 100% 缩放。此外,我们没有资源升级到 WPF。
python - pyglet 中的高 DPI 视网膜窗口
有没有办法在 pyglet 中创建一个视网膜窗口?
默认pyglet.window.Window()
会在我的视网膜屏幕上创建一个模糊的窗口。pyglet 中是否有设置,或者我是否必须潜入 Open GL 管道才能做到这一点?
windows-10 - 以编程方式覆盖高 DPI 意识
Windows 10 Creator's Update Edition 中为最终用户提供了一个新选项。最终用户可以在兼容性选项卡上将 EXE 的属性更改为“覆盖高 DPI 缩放行为”并将其设置为系统(增强)。我对其进行了测试,它适用于一些经典的 win32 应用程序。
我想通过 API 调用或清单的代码来做到这一点。没有这方面的信息。那可能吗?从我得到的评论中,它想澄清这是一个新的创作者更新功能,我特别想知道如何通过清单或代码为覆盖功能设置“系统(增强)”选项。