gpt4 book ai didi

c++ - 为什么 GetObject 返回一个 bmBits 为空的 BITMAP?

转载 作者:可可西里 更新时间:2023-11-01 12:40:35 24 4
gpt4 key购买 nike

上下文:我正在尝试截取另一个窗口的屏幕截图以将其输入 OpenCV。我在网上找到了一些代码,应该能够将 BITMAP 转换为 OpenCV 可以使用的东西。不幸的是我遇到了一些麻烦。

问题:为什么 bmBits 属性/成员总是空的? (我也尝试使用 PrintWindow 而不是 BitBlt 结果是一样的)

#include <iostream>
#include <string>
#include <Windows.h>

int main(int argc, char* argv[])
{
std::wstring windowName = L"Calculator";

RECT rect;
HWND hwnd = FindWindow(NULL, windowName.c_str());
if (hwnd == NULL)
{
return 0;
}
GetClientRect(hwnd, &rect);

HDC hdcScreen = GetDC(NULL);
HDC hdc = CreateCompatibleDC(hdcScreen);
HBITMAP hbmp = CreateCompatibleBitmap(hdcScreen,
rect.right - rect.left, rect.bottom - rect.top);
SelectObject(hdc, hbmp);

PrintWindow(hwnd, hdc, PW_CLIENTONLY);

BITMAP bmp;
GetObject(hbmp, sizeof(BITMAP), &bmp);

return 0;
}

最佳答案

bmBits 成员对于 DIB 部分是非空的。对于设备相关的位图(例如您正在创建的位图),bmBits 未设置,因为像素位于视频卡上,而不是主内存中。

在您的示例中,如果您想直接访问这些位,则需要将 CreateCompatibleBitmap 更改为 CreateDIBSection

关于c++ - 为什么 GetObject 返回一个 bmBits 为空的 BITMAP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12832292/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com