title: C++ Saving a Bitmap File
body: <p>so what I am trying to do is to have my program take a screenshot and save it on the computer. The part of actually taking the screenshot I will program later, and I am first trying to solve the problem of how to actually save a bmp file on the computer. I found the following code that would help me out with that: </p>
  
  <pre><code>// szPathName : Specifies the pathname
  
  // lpBits    : Specifies the bitmap bits
  
  // w    : Specifies the image width
  
  // h    : Specifies the image height
  
  bool SaveImage(char* szPathName, void* lpBits, int w, int h)
  
  {
  
      //Create a new file for writing
  
      FILE *pFile = fopen(szPathName, "wb");
  
      if(pFile == NULL)
  
      {
  
          return false;
  
      }
  
          BITMAPINFOHEADER BMIH;
  
          BMIH.biSize = sizeof(BITMAPINFOHEADER);
  
          BMIH.biSizeImage = w * h * 3;
  
          // Create the bitmap for this OpenGL context
  
          BMIH.biSize = sizeof(BITMAPINFOHEADER);
  
          BMIH.biWidth = w;
  
          BMIH.biHeight = h;
  
          BMIH.biPlanes = 1;
  
          BMIH.biBitCount = 24;
  
          BMIH.biCompression = BI_RGB;
  
          BMIH.biSizeImage = w * h* 3;
  
          BITMAPFILEHEADER bmfh;
  
          int nBitsOffset = sizeof(BITMAPFILEHEADER) + BMIH.biSize;
  
          LONG lImageSize = BMIH.biSizeImage;
  
          LONG lFileSize = nBitsOffset + lImageSize;
  
          bmfh.bfType = 'B'+('M'&lt;&lt;8);
  
          bmfh.bfOffBits = nBitsOffset;
  
          bmfh.bfSize = lFileSize;
  
          bmfh.bfReserved1 = bmfh.bfReserved2 = 0;
  
          //Write the bitmap file header
  
          UINT nWrittenFileHeaderSize = fwrite(&amp;bmfh, 1,
  
          sizeof(BITMAPFILEHEADER), pFile);
  
          //And then the bitmap info header
  
          UINT nWrittenInfoHeaderSize = fwrite(&amp;BMIH,
  
          1, sizeof(BITMAPINFOHEADER), pFile);
  
          //Finally, write the image data itself
  
          //-- the data represents our drawing
  
          UINT nWrittenDIBDataSize =
  
          fwrite(lpBits, 1, lImageSize, pFile);
  
          fclose(pFile);
  
  
  
      return true;
  
  }
  </code></pre>
  
  <p>So what is the issue.... Well I do not understand the varialbe IpBits. there is a brief explanation of the lpBits in the comments of the code (lpBits: Specifies the bitmap bits)... but I don't know what that actually means. I tried going into msdn and looking into the fopen and fclose functions since fclose is the function that will eventually use the lpbits that I pass to the SaveImage function.... and well it seemed that the lpBits variable in the fclose function varies depending on what variable was passed in the fopen function. I tried to find out what the "wb" of the fopen function means but was unsuccessful (even searching on msdn). </p>
  
  <p>QUESTION: in the case that I use "wb" as the second variable in the fopen function in my previous code, what exactly would the lpBits in the fclose function be? When I ask what exactly would it be, I mean... what type of variable is it (in the code it is placed as void* which basically allows it to be any variable) and I would appriciate any feedback you could give. </p>
  
  <p>Thanks guys!</p>