我的需求是从游戏里截取画面出来到window的DC上,供GDI使用,代码如下:
void HelloWorld::update(float delta)
{
m_target->clear(0, 0, 0, 1);
m_target->begin();
visit();
m_target->end();
Image* targetImage = m_target->newImage(false);
int width = targetImage->getWidth();
int height = targetImage->getHeight();
RECT rc, rcSurface = { 0, 0, width, height };
::GetWindowRect(m_glWindow, &rc);
POINT ptWinPos = { rc.left, rc.top };
POINT ptSrc = { 0, 0 };
SIZE szWin = { width, height };
BLENDFUNCTION stBlend = { AC_SRC_OVER, 0, 255, AC_SRC_ALPHA };
HDC hdcWnd = GetWindowDC(m_glWindow);
memcpy(m_dcSurface.GetBits(), targetImage->getData(), 4 * width * height);
UpdateLayeredWindow(m_glWindow, hdcWnd, &ptWinPos, &szWin, m_dcSurface.GetSafeHdc(), &ptSrc, 0, &stBlend, ULW_ALPHA);
ReleaseDC(m_glWindow,hdcWnd);
if (m_saveFlag)
{
m_saveFlag = false;
targetImage->saveToFile("asdfasdf.png");
}
targetImage->release();
}
```
但是最终的显示结果是这样的:
图中的人物是个2D Sprite, 乌龟是Sprite3D, 都是同一级别的子节点,没有做任何特殊处理. 问题是截取出来的图像里乌龟消失了.
求教,百思不得其解.
