none
如何使用Magnification API捕获子屏幕图像数据? RRS feed

  • 问题

  • 1)我们使用Magnification API来捕获屏幕的图像数据,并且要求在捕获过程中可以排除几个窗口。因为我们的程序需要与win7兼容,所以我们不能使用太新的API。
    2)DXGI不支持排除windows,Setwindowdisplayaffinity只支持一个窗口。所以我们只能选择使用Magnification API。
    3)问题:当我使用放大API捕捉主屏幕的图像时,MagImageScalingCallback设置的回调可以触发并返回数据,但当我把Host窗口放在子屏幕上捕捉子屏幕时,子屏幕的内容可以显示在Host窗口上,但是MagImageScalingCallback设置的回调不会被触发。
    4)我现在非常想找到一种方法,在不使用MagImageScalingCallback的情况下,捕获到子屏幕的图像数据(也就是3中提到的显示到子屏上的Host窗口上的数据,RGB或YUV格式 都行),并且能高效地实现排除窗口功能。如果MagImageScalingCallback能用也没问题。
    2020年12月29日 1:39

全部回复

  • 代码片段:

    hostWindowRect.top = -1080;
    hostWindowRect.bottom = -180;  // top quarter of screen
    hostWindowRect.left = 0;
    hostWindowRect.right = 1920;
    int width = hostWindowRect.right - hostWindowRect.left;
    int height = hostWindowRect.bottom - hostWindowRect.top;
    // Create the host window.
    RegisterHostWindowClass(hinst);
    hwndHost = CreateWindowEx(WS_EX_LAYERED,
    WindowClassName, WindowTitle,
    RESTOREDWINDOWSTYLES,
    hostWindowRect.left, hostWindowRect.top, width, height, NULL, NULL, hInst, NULL);
    if (!hwndHost) {
    return FALSE;
    }

    // Create a magnifier control that fills the client area.
    magWindowRect.top = -1080;
    magWindowRect.bottom = 0;
    magWindowRect.left = 0;
    magWindowRect.right = 1920;
    width = magWindowRect.right - magWindowRect.left;
    height = magWindowRect.bottom - magWindowRect.top;
    hwndMag = CreateWindow(WC_MAGNIFIER, TEXT("MagnifierWindow"),
    WS_CHILD | MS_SHOWMAGNIFIEDCURSOR | WS_VISIBLE,
    magWindowRect.left, magWindowRect.top, width, height, hwndHost, NULL, hInst, NULL);
    if (!hwndMag) {
    return FALSE;
    }
      BOOL result = MagSetImageScalingCallback(
    hwndMag,
    &OnMagImageScalingCallback);
    if (result) {
    }

    //... ...
    sourceRect.top = -1080;
    sourceRect.bottom = 0;
    sourceRect.left = 0;
    sourceRect.right = 1920;
    // Set the source rectangle for the magnifier control.
    MagSetWindowSource(hwndMag, sourceRect);

    2020年12月29日 1:41
  • 你好,

    感谢您在MSDN中文论坛发帖提问。

    根据你的问题我认为这个问题跟winapi更相关, 我们发现您已经在Q&A论坛上发布了类似问题, 请您继续关注Q&A论坛上的更新, 你将会的到更专业的帮助。

    Best Regards,

    Jeanine


    "Visual c++" forum will be migrating to a new home on Microsoft Q&A !
    We invite you to post new questions in the "Developing Universal Windows apps" forum’s new home on Microsoft Q&A !
    For more information, please refer to the sticky post.

    2020年12月29日 5:56