Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <GL/glut.h>
- void ScreenShot(int W, int H);
- void renderScene(void) {
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- glBegin(GL_TRIANGLES);
- glVertex3f(-0.5, -0.5, 0.0);
- glVertex3f(0.0, 0.5, 0.0);
- glVertex3f(0.5, -0.5, 0.0);
- glEnd();
- ScreenShot(400, 400);
- glutSwapBuffers();
- }
- int main(int argc, char **argv)
- {
- glutInit(&argc, argv);
- glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
- glutInitWindowPosition(100, 100);
- glutInitWindowSize(400, 400);
- glutCreateWindow("Урок 1");
- glutDisplayFunc(renderScene);
- glutMainLoop();
- return 1;
- }
- void ScreenShot(int W, int H)
- {
- const int imSize = W * H * 3;
- unsigned char *image = new unsigned char[imSize];
- memset(image, 0, imSize);
- glReadPixels(0, 0, W, H, GL_RGB, GL_UNSIGNED_BYTE, image);
- BITMAPINFO bmi;
- memset(&bmi, 0, sizeof(BITMAPINFOHEADER));
- bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
- bmi.bmiHeader.biHeight = H;
- bmi.bmiHeader.biWidth = W;
- bmi.bmiHeader.biPlanes = 1;
- bmi.bmiHeader.biBitCount = 24;
- bmi.bmiHeader.biCompression = BI_RGB;
- bmi.bmiHeader.biSizeImage = imSize;
- FILE *F = fopen("C:\\test\\screen.bmp", "w");
- int nBitsOffset = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
- LONG lImageSize = imSize;
- LONG lFileSize = nBitsOffset + lImageSize;
- BITMAPFILEHEADER bmfh;
- bmfh.bfType = 'B' + ('M' << 8);
- bmfh.bfOffBits = nBitsOffset;
- bmfh.bfSize = lFileSize;
- bmfh.bfReserved1 = bmfh.bfReserved2 = 0;
- UINT nWrittenFileHeaderSize = fwrite(&bmfh, 1, sizeof(BITMAPFILEHEADER), F);
- UINT nWrittenInfoHeaderSize = fwrite(&bmi, 1, sizeof(BITMAPINFOHEADER), F);
- UINT nWrittenDIBDataSize = fwrite(image, 1, imSize, F);
- UINT total = nWrittenDIBDataSize + nWrittenInfoHeaderSize + nWrittenFileHeaderSize;
- delete[]image;
- fclose(F);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement