OpenGL:将绘制场景保存为bmp图片

来源:互联网 发布:软件hd什么意思 编辑:程序博客网 时间:2023/12/10 22:36

OpenGL:将绘制场景保存为bmp图片,方便出图

void ScreenShot(){GLint pView[4];glGetIntegerv(GL_VIEWPORT,pView);//得到视图矩阵,pView[2]为宽即width,pView[3]为高即heightGLsizei numComponet = 3;GLsizei bufferSize = pView[2]*pView[3]*sizeof(GLfloat)*numComponet;GLfloat* _data = new GLfloat[bufferSize];unsigned char*  data = new unsigned char[bufferSize];glPixelStorei(GL_UNPACK_ALIGNMENT, 4);//设置4字节对齐glReadBuffer(GL_FRONT);  glReadPixels(pView[0],pView[1],pView[2],pView[3],GL_BGR_EXT,GL_FLOAT,_data);//不是GL_RGB的读取方式,而是GL_BGR或者GL_BGR_ExtglReadBuffer(GL_BACK); for (int i = 0 ; i <bufferSize ; i ++){data[i] = _data[i]*255;}BITMAPFILEHEADER fileHeader;BITMAPINFOHEADER infoHeader;infoHeader.biSize = 40;infoHeader.biWidth = width;infoHeader.biHeight = height;infoHeader.biPlanes = 1;infoHeader.biBitCount = 24;infoHeader.biCompression = BI_RGB;infoHeader.biSizeImage =pView[2]* pView[3] * 3;infoHeader.biXPelsPerMeter = 0;infoHeader.biYPelsPerMeter = 0;infoHeader.biClrUsed = 0;infoHeader.biClrImportant = 0;fileHeader.bfType = 0x4D42;fileHeader.bfReserved1 = 0;fileHeader.bfReserved2 = 0;fileHeader.bfOffBits = 54;fileHeader.bfSize = (DWORD)(sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+pView[2]* pView[3] * 3);FILE *fd;if( !(fd = fopen(filepath,"wb+")) )//filepath为你所保存文件的名字{AfxMessageBox("bmp图片申请出错");exit(0);}else{fwrite(&fileHeader,1,sizeof(BITMAPFILEHEADER),fd);fwrite(&infoHeader,1,sizeof(BITMAPINFOHEADER),fd);fwrite(data,1,pView[2]* pView[3] * 3,fd);fclose(fd);}delete[] data;delete[] _data;}
场景截图示例:





阅读全文
0 0
原创粉丝点击