Opengl 截屏行为

Opengl 截屏行为,opengl,windows-7,gdi,screen-capture,Opengl,Windows 7,Gdi,Screen Capture,我使用以下代码捕获桌面: Frame::Frame() { source_win=GetDesktopWindow(); 矩形r; GetWindowRect(源代码)&r; 宽度=右; 高度=r.底部; source\u context=GetDC(source\u win); sink_context=CreateCompatibleDC(源_context); sink\u bitmap=CreateCompatibleBitmap(源\u上下文、宽度、高度); old_obj=选择对象

我使用以下代码捕获桌面:

Frame::Frame()
{
source_win=GetDesktopWindow();
矩形r;
GetWindowRect(源代码)&r;
宽度=右;
高度=r.底部;
source\u context=GetDC(source\u win);
sink_context=CreateCompatibleDC(源_context);
sink\u bitmap=CreateCompatibleBitmap(源\u上下文、宽度、高度);
old_obj=选择对象(接收上下文、接收位图);
memset(&info_out,0,sizeof(info_out));
info_out.bmiHeader.biSize=sizeof(info_out.bmiHeader);
GetDIBits(源上下文、接收器位图、0,0、NULL和信息输出、DIB\U RGB\U颜色);
info_out.bmiHeader.biBitCount=24;
info_out.bmiHeader.biCompression=BI_RGB;
bitmapdata=malloc(getScanlineSize(info_out.bmiHeader.biWidth
,info_out.bmiHeader.biBitCount)
*信息输出(页眉高度);
p_rows=(void**)malloc(sizeof(void*)*info_out.bmiHeader.biHeight);

对于(int k=0;kYou知道这是一个糟糕的代码,对吧?你正在使用c风格的强制转换,
malloc/free
,void指针,…。你真的应该清理一下。大多数void指针来自GDI对象。而原始malloc是因为我需要一块位图数据,然后指向每一行。如果不引入更多的包装器类,我就没有任何东西了。)可以。@ USE87329:我认为KillianDS建议使用NeX/DELL代替MALC/C++,也可以在C++中使用<代码> StasyType(表达式)。
而不是C样式强制转换。当然,使用new/delete您根本不需要强制转换。是的,但像素缓冲区没有特定类型。它只是一块原始内存。这样更好吗?bitmapdata=new char[…];//因为每个指针都可以隐式强制转换为空*