A general-purpose window upscaler for Windows 10/11.
  • HLSL 91.6%
  • C++ 8.1%
  • C 0.2%
Find a file
2021-04-20 10:26:38 +08:00
CursorHook 尝试使用WinRT Capture API捕获窗口 2021-04-20 10:26:37 +08:00
img 更新文档 2021-03-21 10:54:28 +08:00
Magpie 初步支持 WinRT Capturer API 2021-04-20 10:26:38 +08:00
Runtime 初步支持 WinRT Capturer API 2021-04-20 10:26:38 +08:00
.gitattributes 添加 .gitignore 和 .gitattributes。 2021-02-20 21:20:07 +08:00
.gitignore 尝试使用EasyHook实现完善光标映射 2021-03-12 19:37:40 +08:00
LICENSE 在MIT许可证下开源 2021-03-21 11:09:59 +08:00
Magpie.sln 完善编译配置 2021-03-14 14:35:10 +08:00
README.md 微小优化 2021-04-17 19:56:01 +08:00
光标映射.md 添加文档 2021-03-15 21:39:07 +08:00

MAGPIE

窗口放大镜!

可以将任意窗口全屏显示,支持高级缩放算法,包括 Jinc、Anime4K本项目包含一个hlsl移植、Lanczos等。

主要用于游戏窗口的放大显示,适用于那些不支持全屏模式,或者游戏自带的全屏模式会使画面模糊的情况。

本项目还处于早期阶段欢迎fork和star欢迎任何形式的贡献。

使用方法

窗口截图

程序启动后,激活要放大的窗口,按下热键即可全屏显示该窗口,再次按下热键将退出全屏。

以下为配置说明:

缩放模式

目前缩放模式仅支持通用Lanczos+锐化以及动漫Anime4K+mitchell+锐化。内部使用json如果你想可以轻松地组合出自己的缩放模式。

抓取模式

程序如何抓取源窗口图像,有两种选择:

  1. GDI模式使用GDI抓取源窗口速度很快但无法抓取到DirectX窗口
  2. MagCallback模式使用Magnification API抓取源窗口可以抓取到所有类型的窗口但速度较慢

注入模式

如果源程序使用了自定义鼠标,屏幕上可能出现两个鼠标,使用进程注入可解决这个问题。有三种选择:

  1. 不使用注入:适用于源窗口没有自定义鼠标的场合
  2. 运行时注入:在窗口运行时按下热键可进入全屏并注入窗口,退出全屏后取消注入
  3. 启动时注入:适用于运行时注入不起作用的场合,不能注入正在运行的进程,需要手动选择要启动并注入的程序

高级选项

  • 显示帧率:在屏幕左上角显示帧率
  • 低延迟模式:使用“可等待对象”降低帧延迟。开启后可有效降低输入延迟,在帧率不足时可稍微提高帧率
  • 关闭垂直同步:解除锁帧。在帧率不足时可稍微提高帧率,帧率足够时请不要开启

效果截图

以下图像均只用于演示目的

通用模式

源窗口

通用_源

放大后

通用_放大后

Anime4K模式

源窗口

Anime4K_源

放大后

Anime4K_放大后

实现原理

尽管功能与Lossless ScalingIntegerScaler类似但本程序的实现原理与它们完全不同。Lossless Scaling和IntegerScaler使用Magnification API实现对窗口的放大但此API无法实现高级缩放算法其核心函数MagSetImageScalingCallback已被废弃因此它们必须与显卡驱动打交道而你的显卡很可能不被支持。此外它们只支持整数倍的放大这极大限制了它们的使用场景。举例来说它们无法把一个1024x768大小的窗口放大到1920x1080。

本程序使用了一个十分符合直觉的方式放大窗口使用一个全屏窗口覆盖屏幕捕获原窗口的内容放大后在该全屏窗口显示出来。这种方式使得缩放算法不受任何限制让我们可以自由使用现存的优秀缩放算法。为了使用GPU加速全屏窗口使用了Direct2D技术将缩放算法实现为Direct2D Effect通过Effect的堆叠我们可以用任何方式缩放窗口以取得完美的效果。

这种方案唯一的限制便是系统光标因此这里使用了一点hack将系统的光标替换为透明然后在全屏窗口上绘制它因此虽然光标始终处于源窗口内但其不可见。大多数情况下这些更改不会被用户感知到尽管如此如果源窗口使用了自定义光标用户会在屏幕上看到两个光标。为了解决这个问题我们提供了一个更深入的hack选项即注入源窗口的进程将其自定义光标也替换为透明然后在全屏窗口上将其绘制更深入的解释见光标映射。大多数情况下它可以工作的很好但因为Windows生态的复杂性实际效果还有待测试。

免责声明

因为使用了进程注入技术,本程序极有可能被报毒。出于安全考虑,您应该检查源代码并自行编译。

开发本程序的初衷不含有任何恶意,但使用它所造成的后果应由您自己承担。

开发计划

Milestones