Advertisement
CherMi

BMP test

Dec 16th, 2019
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.83 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <GL/glut.h>
  4.  
  5. void ScreenShot(int W, int H);
  6.  
  7. void renderScene(void) {
  8.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  9.  
  10.     glBegin(GL_TRIANGLES);
  11.     glVertex3f(-0.5, -0.5, 0.0);
  12.     glVertex3f(0.0, 0.5, 0.0);
  13.     glVertex3f(0.5, -0.5, 0.0);
  14.     glEnd();
  15.  
  16.     ScreenShot(400, 400);
  17.     glutSwapBuffers();
  18. }
  19.  
  20. int main(int argc, char **argv)
  21. {
  22.     glutInit(&argc, argv);
  23.     glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
  24.     glutInitWindowPosition(100, 100);
  25.     glutInitWindowSize(400, 400);
  26.     glutCreateWindow("Урок 1");
  27.  
  28.     glutDisplayFunc(renderScene);
  29.  
  30.     glutMainLoop();
  31.  
  32.     return 1;
  33. }
  34.  
  35. void ScreenShot(int W, int H)
  36. {
  37.     const int imSize = W * H * 3;
  38.     unsigned char *image = new unsigned char[imSize];
  39.     memset(image, 0, imSize);
  40.     glReadPixels(0, 0, W, H, GL_RGB, GL_UNSIGNED_BYTE, image);
  41.     BITMAPINFO bmi;
  42.     memset(&bmi, 0, sizeof(BITMAPINFOHEADER));
  43.     bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
  44.     bmi.bmiHeader.biHeight = H;
  45.     bmi.bmiHeader.biWidth = W;
  46.     bmi.bmiHeader.biPlanes = 1;
  47.     bmi.bmiHeader.biBitCount = 24;
  48.     bmi.bmiHeader.biCompression = BI_RGB;
  49.     bmi.bmiHeader.biSizeImage = imSize;
  50.     FILE *F = fopen("C:\\test\\screen.bmp", "w");
  51.     int nBitsOffset = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
  52.     LONG lImageSize = imSize;
  53.     LONG lFileSize = nBitsOffset + lImageSize;
  54.     BITMAPFILEHEADER bmfh;
  55.     bmfh.bfType = 'B' + ('M' << 8);
  56.     bmfh.bfOffBits = nBitsOffset;
  57.     bmfh.bfSize = lFileSize;
  58.     bmfh.bfReserved1 = bmfh.bfReserved2 = 0;
  59.  
  60.     UINT nWrittenFileHeaderSize = fwrite(&bmfh, 1, sizeof(BITMAPFILEHEADER), F);
  61.     UINT nWrittenInfoHeaderSize = fwrite(&bmi, 1, sizeof(BITMAPINFOHEADER), F);
  62.     UINT nWrittenDIBDataSize = fwrite(image, 1, imSize, F);
  63.     UINT total = nWrittenDIBDataSize + nWrittenInfoHeaderSize + nWrittenFileHeaderSize;
  64.     delete[]image;
  65.     fclose(F);
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement