首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >截图:本地API与opengl

截图:本地API与opengl
EN

Stack Overflow用户
提问于 2015-02-06 23:44:27
回答 2查看 670关注 0票数 1

在我的程序中,我使用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(++)几乎一无所知)

更新:我读了很多关于捕捉截图的方法。有一些知识:

  1. Opengl (可能)是真实的屏幕抓取,但使用它将是不正确的这个软件。顺便说一句,我不在乎,如果有什么解决办法,我会接受的。

  1. DirectX这不是解决我的问题的方法,因为这个软件不能在Mac下工作。

EN

回答 2

Stack Overflow用户

发布于 2015-02-07 08:15:36

为了扩展一下罗振义的答案,这里是我过去使用过的一个代码片段。

它还使用FreeImage导出屏幕截图。

代码语言:javascript
复制
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);
}
票数 1
EN

Stack Overflow用户

发布于 2015-02-06 23:57:28

glReadPixels( GLint x、GLint y、GLsizei宽度、GLsizei高度、GLenum格式、GLenum类型、GLvoid * data)将从位置数据开始将像素块读入客户端内存。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28376723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档