gpt4 book ai didi

c++ - 使用 BitBlt 获取另一个窗口的单个像素

转载 作者:行者123 更新时间:2023-11-28 08:12:20 24 4
gpt4 key购买 nike

这是我目前正在做的:

  • 通过GetWindowDC获取窗口DC
  • 使用 CreateCompatibleDC 创建一个兼容的 DC
  • 在我的兼容 DC 上调用 GetPixel

不幸的是,我所有的 GetPixel 调用都返回 CLR_INVALID。这是我的代码。

bool Gameboard::Refresh()
{
bool ret = false;
HDC context, localContext;

context = GetWindowDC(m_window);
if (context != NULL)
{
localContext = CreateCompatibleDC(context);
if (localContext != NULL)
{
if (BitBlt(localContext, 0, 0, GameboardInfo::BoardWidth, GameboardInfo::BoardHeight,
context, GameboardInfo::TopLeft.x, GameboardInfo::TopLeft.y, SRCCOPY))
{
ret = true;
// several calls to GetPixel which all return CLR_INVALID
}
DeleteDC(localContext);
}
ReleaseDC(m_window, context);
}
return ret;
}

有什么想法吗?

最佳答案

我相信您需要在您的设备环境中选择一个位图。

“必须在设备上下文中选择位图,否则,将在所有像素上返回 CLR_INVALID。” - GetPixel()

bool Gameboard::Refresh()
{
bool ret = false;
HDC context, localContext;


HGDIOBJ origHandle;


context = GetWindowDC(m_window);
if (context != NULL)
{
localContext = CreateCompatibleDC(context);


origHandle = SelectObject(localcontext,CreateCompatibleBitmap(context, GameboardInfo::BoardWidth, GameboardInfo::BoardHeight));


if (localContext != NULL)
{
if (BitBlt(localContext, 0, 0, GameboardInfo::BoardWidth, GameboardInfo::BoardHeight,
context, GameboardInfo::TopLeft.x, GameboardInfo::TopLeft.y, SRCCOPY))
{
ret = true;
// several calls to GetPixel which all return CLR_INVALID
}

SelectObject(localcontext, origHandle);


DeleteDC(localContext);
}
ReleaseDC(m_window, context);
}
return ret;
}

关于c++ - 使用 BitBlt 获取另一个窗口的单个像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8698049/

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