更新README

This commit is contained in:
Xu Liu 2021-04-23 21:00:19 +08:00
commit f683172353
3 changed files with 13 additions and 18 deletions

View file

@ -6,7 +6,7 @@
主要用于游戏窗口的放大显示,适用于那些不支持全屏模式,或者游戏自带的全屏模式会使画面模糊的情况。
本项目还处于早期阶段欢迎fork和star欢迎任何形式的贡献
使用中遇到问题时请提交issue
## 使用方法
@ -18,28 +18,28 @@
#### 缩放模式
目前缩放模式仅支持通用Lanczos+锐化以及动漫Anime4K+mitchell+锐化)。内部使用json如果你想可以轻松地组合出自己的缩放模式
目前缩放模式仅支持通用Lanczos+锐化以及动漫Anime4K+mitchell+锐化)。如果你想组合自己的缩放模式请修改根目录下的ScaleModels.json
#### 抓取模式
程序如何抓取源窗口图像,有三种选择:
1. WinRT Capture使用[Screen Capture API](https://docs.microsoft.com/en-us/windows/uwp/audio-video-camera/screen-capture)抓取窗口,几乎完美的抓取方案唯一的缺点是只支持Windows 10, version 1803及以后的版本
1. WinRT Capture使用[Screen Capture API](https://docs.microsoft.com/en-us/windows/uwp/audio-video-camera/screen-capture)抓取窗口,最推荐的方法。此API从Windows 10, v1803开始提供
2. GDI使用GDI抓取源窗口速度较快无法抓取到一些DirectX窗口
3. MagCallback使用[Magnification API](https://docs.microsoft.com/en-us/previous-versions/windows/desktop/magapi/entry-magapi-sdk)抓取源窗口相比GDI可以抓取到更多类型的窗口但速度较慢
3. MagCallback使用[Magnification API](https://docs.microsoft.com/en-us/previous-versions/windows/desktop/magapi/entry-magapi-sdk)抓取源窗口相比GDI可以抓取到更多类型的窗口但速度较慢。不推荐使用
#### 注入模式
如果源程序使用了自定义鼠标,屏幕上可能出现两个鼠标,使用进程注入可解决这个问题。有三种选择:
如果源程序使用了自定义光标,屏幕上可能出现两个光标,使用进程注入可解决这个问题。有三种选择:
1. 不使用注入:适用于源窗口没有自定义标的场合
1. 不使用注入:适用于源窗口没有自定义标的场合
2. 运行时注入:在窗口运行时按下热键可进入全屏并注入窗口,退出全屏后取消注入
3. 启动时注入:适用于运行时注入不起作用的场合,不能注入正在运行的进程,需要手动选择要启动并注入的程序
#### 高级选项
* 显示帧率:在屏幕左上角显示帧率
* 低延迟模式:使用“可等待对象”降低帧延迟。开启后可有效降低输入延迟,在帧率不足时可稍微提高帧率
* 低延迟模式:开启后可有效降低输入延迟使用WinRT Capture抓取模式时推荐开启
* 关闭垂直同步:解除锁帧。不推荐使用
## 效果截图
@ -70,9 +70,9 @@
尽管功能与[Lossless Scaling](https://store.steampowered.com/app/993090/Lossless_Scaling/)和[IntegerScaler](https://tanalin.com/en/projects/integer-scaler/)类似但本程序的实现原理与它们完全不同。Lossless Scaling和IntegerScaler使用Magnification API实现对窗口的放大但此API无法实现高级缩放算法其核心函数[MagSetImageScalingCallback](https://docs.microsoft.com/en-us/windows/win32/api/magnification/nf-magnification-magsetimagescalingcallback)已被废弃因此它们必须与显卡驱动打交道而你的显卡很可能不被支持。此外它们只支持整数倍的放大这极大限制了它们的使用场景。举例来说它们无法把一个1024x768大小的窗口放大到1920x1080。
本程序使用了一个十分符合直觉的方式放大窗口使用一个全屏窗口覆盖屏幕捕获原窗口的内容放大后在该全屏窗口显示出来。这种方式使得缩放算法不受任何限制让我们可以自由使用现存的优秀缩放算法。为了使用GPU加速全屏窗口使用了Direct2D技术,将缩放算法实现为[Direct2D Effect](https://docs.microsoft.com/en-us/windows/win32/direct2d/effects-overview)通过Effect的堆叠我们可以用任何方式缩放窗口以取得完美的效果。
本程序的原理非常简单使用一个全屏窗口覆盖屏幕捕获原窗口的内容放大后在该全屏窗口显示出来。这种方式使得缩放算法不受任何限制让我们可以自由使用现存的优秀缩放算法。为了使用GPU加速本程序使用了Direct2D,将缩放算法实现为[Direct2D Effect](https://docs.microsoft.com/en-us/windows/win32/direct2d/effects-overview)通过Effect的堆叠我们可以用任何方式缩放窗口以取得完美的效果。
这种方案唯一的限制便是系统光标因此这里使用了一点hack将系统的光标替换为透明然后在全屏窗口上绘制它因此虽然光标始终处于源窗口内但其不可见。大多数情况下这些更改不会被用户感知到尽管如此如果源窗口使用了自定义光标用户会在屏幕上看到两个光标。为了解决这个问题我们提供了更深入的hack选项即注入源窗口的进程将其自定义光标也替换为透明然后在全屏窗口上将其绘制更深入的解释见[光标映射](./光标映射.md)。经过测试该方法表现良好如果遇到失效的情况请提交issue
关于光标的解决方案见[光标映射](./光标映射.md)
## 使用提示
@ -88,7 +88,3 @@
开发本程序的初衷不含有任何恶意,但使用它所造成的后果应由您自己承担。
## 开发计划
见 [Milestones](https://github.com/Blinue/Magpie/milestones)

View file

@ -26,11 +26,10 @@ D2D_PS_ENTRY(main) {
float l = Uncompress(D2DSampleInput(1, coord1.xy + (float2(0.5, 0.5) - f) * coord1.zw))[i.y * 2 + i.x];
// 消除因压缩产生的噪声
if (abs(l) > 0.01) {
float3 yuv = RGB2YUV(D2DSampleInput(0, coord0.xy).xyz);
return float4(YUV2RGB(yuv.x + l, yuv.y, yuv.z), 1);
} else {
if (abs(l) < 0.01) {
return D2DSampleInput(0, coord0.xy);
}
float3 yuv = RGB2YUV(D2DSampleInput(0, coord0.xy).xyz);
return float4(YUV2RGB(yuv.x + l, yuv.y, yuv.z), 1);
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.5 KiB

After

Width:  |  Height:  |  Size: 8.3 KiB

Before After
Before After