| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 
 |  
bool CPrinterRPG::SaveBitmap(HDC hDC,HBITMAP hBitmap,CString szPath)
{
  FILE * fp= NULL;
  fp = fopen(szPath.GetBuffer(1),"wb");
  if(fp == NULL)
      return false;
 
  BITMAP Bm;
  BITMAPINFO BitInfo;
  ZeroMemory(&BitInfo, sizeof(BITMAPINFO));
  BitInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
  BitInfo.bmiHeader.biBitCount = 0;
 
  if(!::GetDIBits(hDC, hBitmap, 0, 0, NULL, &BitInfo, DIB_RGB_COLORS))
      return (false);
 
  Bm.bmHeight = BitInfo.bmiHeader.biHeight;
  Bm.bmWidth  = BitInfo.bmiHeader.biWidth;
 
  BITMAPFILEHEADER    BmHdr;
 
  BmHdr.bfType        = 0x4d42;   // 'BM' WINDOWS_BITMAP_SIGNATURE
  BmHdr.bfSize        = (((3 * Bm.bmWidth + 3) & ~3) * Bm.bmHeight) 
                        + sizeof(BITMAPFILEHEADER) 
                        + sizeof(BITMAPINFOHEADER);
  BmHdr.bfReserved1   = BmHdr.bfReserved2 = 0;
  BmHdr.bfOffBits     = (DWORD) sizeof(BITMAPFILEHEADER) 
                        + sizeof(BITMAPINFOHEADER);
 
  BitInfo.bmiHeader.biCompression = 0;
 
  // Writing Bitmap File Header ////
  fwrite(&BmHdr,sizeof(BITMAPFILEHEADER),1,fp);
 
  fwrite(&BitInfo.bmiHeader,sizeof(BITMAPINFOHEADER),1,fp);
 
  BYTE *pData = new BYTE[BitInfo.bmiHeader.biSizeImage + 5];
  if(!::GetDIBits(hDC, hBitmap, 0, Bm.bmHeight, 
               pData, &BitInfo, DIB_RGB_COLORS))
      return (false);
 
  if(pData != NULL)
      fwrite(pData,1,BitInfo.bmiHeader.biSizeImage,fp);
 
  fclose(fp);
  delete (pData);
 
  return (true);
} | 
Partager