首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用OpenGL保存OpenGL绘图?

如何用OpenGL保存OpenGL绘图?
EN

Stack Overflow用户
提问于 2012-03-12 01:33:29
回答 4查看 4K关注 0票数 2

我使用OpenGL命令绘制了一个屏幕。并且我必须将此屏幕保存为.bmp或.png格式。但我不能这么做。我正在使用glReadpixels,但我无法继续。如何使用OpenGL在c++中保存此图形?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-03-13 05:08:00

它来了!您必须包含WinGDI.h (我认为GL会这样做!)

代码语言:javascript
复制
void SaveAsBMP(const char *fileName)
{
    FILE *file;
    unsigned long imageSize;
    GLbyte *data=NULL;
    GLint viewPort[4];
    GLenum lastBuffer;
    BITMAPFILEHEADER bmfh;
    BITMAPINFOHEADER bmih;
    bmfh.bfType='MB';
    bmfh.bfReserved1=0;
    bmfh.bfReserved2=0;
    bmfh.bfOffBits=54;
    glGetIntegerv(GL_VIEWPORT,viewPort);
    imageSize=((viewPort[2]+((4-(viewPort[2]%4))%4))*viewPort[3]*3)+2;
    bmfh.bfSize=imageSize+sizeof(bmfh)+sizeof(bmih);
    data=(GLbyte*)malloc(imageSize);
    glPixelStorei(GL_PACK_ALIGNMENT,4);
    glPixelStorei(GL_PACK_ROW_LENGTH,0);
    glPixelStorei(GL_PACK_SKIP_ROWS,0);
    glPixelStorei(GL_PACK_SKIP_PIXELS,0);
    glPixelStorei(GL_PACK_SWAP_BYTES,1);
    glGetIntegerv(GL_READ_BUFFER,(GLint*)&lastBuffer);
    glReadBuffer(GL_FRONT);
    glReadPixels(0,0,viewPort[2],viewPort[3],GL_BGR,GL_UNSIGNED_BYTE,data);
    data[imageSize-1]=0;
    data[imageSize-2]=0;
    glReadBuffer(lastBuffer);
    file=fopen(fileName,"wb");
    bmih.biSize=40;
    bmih.biWidth=viewPort[2];
    bmih.biHeight=viewPort[3];
    bmih.biPlanes=1;
    bmih.biBitCount=24;
    bmih.biCompression=0;
    bmih.biSizeImage=imageSize;
    bmih.biXPelsPerMeter=45089;
    bmih.biYPelsPerMeter=45089;
    bmih.biClrUsed=0;
    bmih.biClrImportant=0;
    fwrite(&bmfh,sizeof(bmfh),1,file);
    fwrite(&bmih,sizeof(bmih),1,file);
    fwrite(data,imageSize,1,file);
    free(data);
    fclose(file);
}
票数 5
EN

Stack Overflow用户

发布于 2012-03-12 02:01:01

除非您觉得特别有野心(或者可能是受虐狂),否则您可能想要使用像DevIL这样已经支持这一点的库。当前版本可以加载和/或保存为PNG和BMP格式,以及其他几十种格式。

与IJG之类的东西相比,它更倾向于使用OpenGL或DirectX (例如,它可以相当直接地将文件加载到纹理中,反之亦然)。

票数 1
EN

Stack Overflow用户

发布于 2012-03-21 08:06:49

我知道您要求的是光栅格式,但一种间接的方法是首先通过gl2ps (http://www.geuz.org/gl2ps/)输出矢量图形。软件包和网站(http://www.geuz.org/gl2ps/#tth_sEc3)上提供了用法示例。

然后,可以使用另一个工具(Inkscape、Image/GraphicsMagick等)将矢量输出转换为您选择的格式。或者是库。一个额外的好处是您可以在将来转换为任何分辨率的位图。

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

https://stackoverflow.com/questions/9657196

复制
相关文章

相似问题

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