首页 > 解决方案 > 将窗口大小调整为更大的显示大小,并从中捕获图像

问题描述

有一个程序,显示一些动画。我需要捕捉它,在高分辨率 (2k) 投影仪上显示它。我的显示器具有全高清 (1920x1080) 分辨率,因此从它捕获的视频将被缩放,从而降低 2k 投影仪的质量。

不幸的是,我无法在投影仪上录制它。

我试图通过下一个代码更改显示分辨率:

DEVMODE devmode;
devmode.dmPelsWidth = 2000;
devmode.dmPelsHeight = 900;
devmode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;
devmode.dmSize = sizeof(DEVMODE);

long result = ChangeDisplaySettings(&devmode, 0);

但是如果设置的分辨率高于显示器的分辨率,它会失败。

我还尝试调整程序窗口的大小。我通过 找到它FindWindow,而不是调整大小。尽管调整了窗口大小,但渲染区域等于显示大小,并且所有超出的内容都没有更新。

我唯一的想法是在虚拟机下以我需要的分辨率运行程序。

也许有办法调整窗口大小,然后像图像一样缩小它?从物理上讲,它会很小,但它本身就具有高分辨率?

如果尝试访问进程内存并尝试查找位图或类似的东西怎么办?

有任何想法吗?


更新

我发现了一个按钮,它可以制作正确的屏幕截图,即使窗口的一部分位于不可见区域。单击后,它会打开默认的 Windows 另存为对话框。显然,我可以制作一个程序,点击按钮,设置文件名递增1,然后点击保存按钮,但我会丢失很多帧。

打赌,要保存的位图是在显示对话框之前创建的。也许我能以某种方式抓住它。我在按下屏幕截图按钮之前和之后检查了 GDI 对象计数,不幸的是,差异大约是 20 个元素,可能是因为保存对话框窗口对象也在计数。

标签: winapiscreen-resolution

解决方案


AMD 显卡具有称为虚拟超分辨率的功能,它允许您将显示升级到虚拟 2k,甚至 4k。您捕获的将是 2k,并在 1080p 面板上缩小。我想NVIDIA也有这个功能,虽然我不知道这个叫什么。


推荐阅读