为什么Windows的OpenCV中的getWindowImageRect无法返回预期值?

时间:2018-08-27 18:13:09

标签: opencv

我试图在OpenCV中创建一个全屏窗口,并且OpenCV中提供的功能正常工作,除了左边界和上边界有白色边缘。花了一些时间研究OpenCV中的代码之后,我发现getWindowImageRect函数以某种方式返回的值比我编写的函数多出x,y和宽度和高度1px。

好的,这是问题。为什么两个函数返回不同的值?

这是我在OpenCV中找到的代码:

CvRect cvGetWindowRect_W32(const char* name)
{
    CvRect result = cvRect(-1, -1, -1, -1);

    CV_FUNCNAME( "cvGetWindowRect_W32" );

    __BEGIN__;

    CvWindow* window;

    if (!name)
        CV_ERROR( CV_StsNullPtr, "NULL name string" );
    window = icvFindWindowByName( name );
    if (!window)
        EXIT; // keep silence here

    RECT rect;
    GetClientRect(window->hwnd, &rect);
    {
    POINT pt = {rect.left, rect.top};
    ClientToScreen(window->hwnd, &pt);
    result = cvRect(pt.x, pt.y, rect.right - rect.left, rect.bottom - rect.top);
    }
    __END__;
    return result;
}

这是我用Python编写的代码,我认为这会给我相同的结果:

def getWindowRect(name)
    hwnd = win32gui.FindWindow(None, name)
    rect_l, rect_t, rect_r, rect_b = win32gui.GetClientRect(hwnd)
    pt_x, pt_y = win32gui.ClientToScreen(hwnd, (rect_l, rect_t))
    result = (pt_x, pt_y, rect_r - rect_l, rect_b - rect_t)
    return result

使用以上两个函数的结果给我这样的输出:

(1, 1, 2559, 1439)
(0, 0, 2560, 1440)

所以我想知道是否有人可以告诉我为什么会这样吗?

请注意,该测试是在Windows 10下执行的。

0 个答案:

没有答案