求一voerlay实例,可以改变内容的

David_Hu 2012-04-25 03:12:14
看了蚊子实例,但是我尝试去改变那蚊子的动作,创建一个位图,然后把BUF内容填进去,可是总是屏幕上是空的,什么也没有?
求指点。。。

static BOOL
LoadCameradataOntoSurface(LPDIRECTDRAWSURFACE lpdds,PBYTE cameradata)
{

HRESULT ddrval;
DDSURFACEDESC ddsd;
HDC hdcSurf = NULL;

if (!lpdds) return FALSE;

//
// get surface size and format.
//
memset(&ddsd, 0, sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_HEIGHT | DDSD_WIDTH;
ddrval = lpdds->GetSurfaceDesc(&ddsd);
if (FAILED(ddrval))
goto Exit;

ddrval = lpdds->GetDC(&hdcSurf);
if (FAILED(ddrval))
goto Exit;

HDC hdcMem;
//HDC hdc = GetDC(m_hWnd);
hdcMem = CreateCompatibleDC(NULL);
HBITMAP hBit=CreateDIBSection(hdcMem,&bmi,DIB_RGB_COLORS,(void **)&cameradata,0,0);
SelectObject(hdcMem,hBit);

//if (BitBlt(hdcSurf, 0, 0, WIDETH_PIXEL_UNIT, HEIGHT_PIXEL_UNIT, hdcMem, 0, 0, SRCCOPY) == FALSE)
// goto Exit;
StretchBlt(hdcSurf,0,0,WIDETH_PIXEL_UNIT,HEIGHT_PIXEL_UNIT,hdcMem,0,0,ddsd.dwWidth,ddsd.dwHeight,SRCCOPY);
RETAILMSG(1,(TEXT("BBBBBB%d\r\n"),GetTickCount()));
Exit:
if (hdcSurf)
lpdds->ReleaseDC(hdcSurf);
if (hdcMem)
DeleteDC(hdcMem);
//g_pDDSOverlay->UpdateOverlay(NULL, g_pDDSPrimary, NULL, DDOVER_SHOW, NULL);

}
...全文
91 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
David_Hu 2012-04-26
  • 打赏
  • 举报
回复
我这里只支持RGB,并且我要求图像进行缩放,所以必须得用上GDI的画图函数,这些画图慢了,才是根源
qwqwqw408 2012-04-25
  • 打赏
  • 举报
回复
文件很大,我填数据是直接内存复制的。
memcpy(pSurf, pImg, y_size);
memcpy(pSurf + y_size, pImg + y_size + u_size, u_size);
memcpy(pSurf + y_size + u_size, pImg + y_size, u_size);

pSurf 就是overlay表面pimg就是yuv格式的数据
David_Hu 2012-04-25
  • 打赏
  • 举报
回复
这就是往表面填数据的函数了,这个里面我改了一下:
StretchBlt这个改成下面的,

SetDIBitsToDevice(hdcSurf,0,0,WIDETH_PIXEL_UNIT,HEIGHT_PIXEL_UNIT,0,0,0,HEIGHT_PIXEL_UNIT,cameradata,&bmi,DIB_RGB_COLORS);
几百MS秒啊,崩溃啊

楼上能否发一下你填数据的代码?
qwqwqw408 2012-04-25
  • 打赏
  • 举报
回复
overlay没这么简单的,先得创建ddraw对象,再创建overlay表面和主表面,再把表面贴到主表面,最后再往这个表面填充数据。

19,500

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧