在我的程序中,我使用Qt的函数:qApp->primaryScreen()->grabWindow(qApp->desktop()->winId(),x_offset,y_offset,w,h);
但对于“主要任务”来说,这有点慢。所以我碰到了上面的一个问题。该程序能够在Windows和Mac下工作。我听说opengl是一个很好的屏幕抓取器,因为它比本地API更接近GPU,加上它的跨平台解决方案。这是我想要的第一个知识:Opengl作为桌面屏幕抓取器,它是真实的吗?--我指的是一个按钮“打印屏幕”。
如果是,how?
如果没有,则:
窗户:你能给我建议一下吗?BitBlt,GetDC,像这样吗?
Mac : AVFoundation?请描述一下这个,或者给出一些关于如何用这个类捕捉截图的链接?(这是一种很难的方法,因为我对目标C(++)几乎一无所知)
更新:我读了很多关于捕捉截图的方法。有一些知识:
发布于 2015-02-07 08:15:36
为了扩展一下罗振义的答案,这里是我过去使用过的一个代码片段。
它还使用FreeImage导出屏幕截图。
void Display::SaveScreenShot (std::string FilePath, SCREENSHOT_FORMAT Format){
// Create Pixel Array
GLubyte* pixels = new GLubyte [3 * Window::width * Window::height];
// Read Pixels From Screen And Buffer Into Array
glPixelStorei (GL_UNPACK_ALIGNMENT, 1);
glReadPixels (0, 0, Window::width, Window::height, GL_BGR, GL_UNSIGNED_BYTE, pixels);
// Convert To FreeImage And Save
FIBITMAP* image = FreeImage_ConvertFromRawBits (pixels, Window::width,
Window::height, 3 * Window::width, 24,
0x0000FF, 0xFF0000, 0x00FF00, false);
FreeImage_Save ((FREE_IMAGE_FORMAT) Format, image, FilePath.c_str (), 0);
// Free Resources
FreeImage_Unload (image);
delete [] (pixels);
}发布于 2015-02-06 23:57:28
glReadPixels( GLint x、GLint y、GLsizei宽度、GLsizei高度、GLenum格式、GLenum类型、GLvoid * data)将从位置数据开始将像素块读入客户端内存。
https://stackoverflow.com/questions/28376723
复制相似问题