0
Это то, что я сейчас делаю:Получение отдельных пикселей другого окна с BitBlt
- ПОЛУЧИТЬ окно DC через
GetWindowDC
- создать совместимый DC с
CreateCompatibleDC
- вызова
GetPixel
на моем совместимом DC
К сожалению, все мои вызовы 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;
}
Любые идеи?
Я уверен, что X/Y значения в моих GetPixel звонки уже смещает не абсолютные местоположения. –
Вам все равно нужно выбрать растровое изображение в совместимый DC, иначе BitBlt не сможет копировать пиксели. Кроме того, используйте GetDIBits - это намного быстрее, чем использование GetPixel. –
Спасибо, теперь он работает! –