mirror of
https://github.com/Blinue/Magpie.git
synced 2026-06-24 02:04:10 +00:00
更新README
This commit is contained in:
parent
25a0436b0a
commit
a5161bc72f
4 changed files with 16 additions and 12 deletions
|
|
@ -15,7 +15,6 @@ namespace Magpie.CursorHook {
|
|||
return NativeMethods.DestroyCursor(handle);
|
||||
}
|
||||
|
||||
|
||||
public override bool Equals(object obj) {
|
||||
if (obj == null || GetType() != obj.GetType()) {
|
||||
return false;
|
||||
|
|
|
|||
21
README.md
21
README.md
|
|
@ -22,10 +22,11 @@
|
|||
|
||||
#### 抓取模式
|
||||
|
||||
程序如何抓取源窗口图像,有两种选择:
|
||||
程序如何抓取源窗口图像,有三种选择:
|
||||
|
||||
1. GDI模式:使用GDI抓取源窗口,速度很快,但无法抓取到DirectX窗口
|
||||
2. MagCallback模式:使用Magnification API抓取源窗口,可以抓取到所有类型的窗口,但速度较慢
|
||||
1. WinRT Capture:使用[Screen Capture API](https://docs.microsoft.com/en-us/windows/uwp/audio-video-camera/screen-capture)抓取窗口,几乎完美的抓取方案,唯一的缺点是只支持Windows 10, version 1803及以后的版本
|
||||
2. GDI:使用GDI抓取源窗口,速度较快,无法抓取到一些DirectX窗口
|
||||
3. MagCallback:使用[Magnification API](https://docs.microsoft.com/en-us/previous-versions/windows/desktop/magapi/entry-magapi-sdk)抓取源窗口,相比GDI可以抓取到更多类型的窗口,但速度较慢
|
||||
|
||||
#### 注入模式
|
||||
|
||||
|
|
@ -39,7 +40,7 @@
|
|||
|
||||
* 显示帧率:在屏幕左上角显示帧率
|
||||
* 低延迟模式:使用“可等待对象”降低帧延迟。开启后可有效降低输入延迟,在帧率不足时可稍微提高帧率
|
||||
* 关闭垂直同步:解除锁帧。在帧率不足时可稍微提高帧率,帧率足够时请不要开启
|
||||
* 关闭垂直同步:解除锁帧。不推荐使用
|
||||
|
||||
## 效果截图
|
||||
|
||||
|
|
@ -67,11 +68,19 @@
|
|||
|
||||
## 实现原理
|
||||
|
||||
尽管功能与[Lossless Scaling](https://store.steampowered.com/app/993090/Lossless_Scaling/)和[IntegerScaler](https://tanalin.com/en/projects/integer-scaler/)类似,但本程序的实现原理与它们完全不同。Lossless Scaling和IntegerScaler使用[Magnification API](https://docs.microsoft.com/en-us/previous-versions/windows/desktop/magapi/entry-magapi-sdk)实现对窗口的放大,但此API无法实现高级缩放算法,其核心函数[MagSetImageScalingCallback](https://docs.microsoft.com/en-us/windows/win32/api/magnification/nf-magnification-magsetimagescalingcallback)已被废弃,因此它们必须与显卡驱动打交道,而你的显卡很可能不被支持。此外,它们只支持整数倍的放大,这极大限制了它们的使用场景。举例来说,它们无法把一个1024x768大小的窗口放大到1920x1080。
|
||||
尽管功能与[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的堆叠,我们可以用任何方式缩放窗口,以取得完美的效果。
|
||||
|
||||
这种方案唯一的限制便是系统光标,因此这里使用了一点hack:将系统的光标替换为透明,然后在全屏窗口上绘制它,因此虽然光标始终处于源窗口内,但其不可见。大多数情况下,这些更改不会被用户感知到,尽管如此,如果源窗口使用了自定义光标,用户会在屏幕上看到两个光标。为了解决这个问题,我们提供了一个更深入的hack选项,即注入源窗口的进程,将其自定义光标也替换为透明,然后在全屏窗口上将其绘制,更深入的解释见[光标映射](./光标映射.md)。大多数情况下它可以工作的很好,但因为Windows生态的复杂性,实际效果还有待测试。
|
||||
这种方案唯一的限制便是系统光标,因此这里使用了一点hack:将系统的光标替换为透明,然后在全屏窗口上绘制它,因此虽然光标始终处于源窗口内,但其不可见。大多数情况下,这些更改不会被用户感知到,尽管如此,如果源窗口使用了自定义光标,用户会在屏幕上看到两个光标。为了解决这个问题,我们提供了更深入的hack选项,即注入源窗口的进程,将其自定义光标也替换为透明,然后在全屏窗口上将其绘制,更深入的解释见[光标映射](./光标映射.md)。经过测试,该方法表现良好,如果遇到失效的情况请提交issue。
|
||||
|
||||
## 使用提示
|
||||
|
||||
1. 如果你设置了DPI缩放,而要放大的窗口不支持(表现为画面模糊),请首先进入该程序的兼容性设置,将“高DPI缩放替代”设置为“应用程序”。
|
||||
|
||||

|
||||
|
||||
2. 一些游戏支持调整窗口的大小,但只是简单的使用线性缩放,这时请先将其设为原始分辨率。
|
||||
|
||||
## 免责声明
|
||||
|
||||
|
|
|
|||
|
|
@ -20,11 +20,6 @@
|
|||
#include <wrl.h>
|
||||
#include <dwmapi.h>
|
||||
|
||||
// C 运行时头文件
|
||||
#include <malloc.h>
|
||||
#include <memory.h>
|
||||
#include <tchar.h>
|
||||
|
||||
// C++ 运行时头文件
|
||||
#include <string>
|
||||
#include <memory>
|
||||
|
|
@ -40,6 +35,7 @@
|
|||
#include <winrt/Windows.Graphics.Capture.h>
|
||||
#include <winrt/Windows.Graphics.DirectX.h>
|
||||
|
||||
|
||||
#pragma comment(lib, "d2d1.lib")
|
||||
#pragma comment(lib, "dwrite.lib")
|
||||
#pragma comment(lib, "Magnification.lib")
|
||||
|
|
|
|||
BIN
img/高DPI设置.png
Normal file
BIN
img/高DPI设置.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 82 KiB |
Loading…
Add table
Add a link
Reference in a new issue