保存位图为文件

//保存位图文件 bool Write2Bitmap(BYTE *pData,CString filename,int width,int height,int bitcount) {

 FILE *fe;  int i;  int index = 0;  unsigned char rgbquad[4];   BITMAPFILEHEADER bitmapFileHeader;   BITMAPINFOHEADER bitmapInfoHeader;   int widthbytes  = (int)((width*bitcount+31)/32)*4;

 switch(bitcount)   {    case 1:      index = 2;      bitmapFileHeader.bfOffBits = (DWORD)(sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + 2*4);    break;    case 4:      index = 16;      bitmapFileHeader.bfOffBits = (DWORD)(sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + 16*4);    break;    case 8:    index = 256;     bitmapFileHeader.bfOffBits = (DWORD)(sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + 256*sizeof(RGBQUAD));    break;      case 24:   case 32:    index = 0;    bitmapFileHeader.bfOffBits = (DWORD)(sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER));    break;   default:      return FALSE;     break;   }   bitmapFileHeader.bfType = 0x4d42;   bitmapFileHeader.bfReserved1 = 0;   bitmapFileHeader.bfReserved2 = 0;   bitmapFileHeader.bfSize = (DWORD)(bitmapFileHeader.bfOffBits + height * widthbytes);

 // write BITMAPFILEHEADER   fe = fopen(filename,"wb");   if(fwrite((void *)&bitmapFileHeader,1,sizeof(BITMAPFILEHEADER),fe) != sizeof(BITMAPFILEHEADER))  {     fclose(fe);    //MessageBox("写文件头");    return FALSE;  }

  // write BITMAPINFOHEADER   bitmapInfoHeader.biBitCount = bitcount;  bitmapInfoHeader.biClrImportant = 0;  bitmapInfoHeader.biClrUsed = 0;   bitmapInfoHeader.biCompression = BI_RGB;  bitmapInfoHeader.biHeight = height;  bitmapInfoHeader.biWidth = width;  bitmapInfoHeader.biPlanes = 1;   bitmapInfoHeader.biSize = sizeof(BITMAPINFOHEADER);   bitmapInfoHeader.biSizeImage = height * widthbytes;  bitmapInfoHeader.biXPelsPerMeter = 0;   bitmapInfoHeader.biYPelsPerMeter = 0; 

 if(fwrite((void *)&bitmapInfoHeader,1,sizeof(BITMAPINFOHEADER),fe) != sizeof(BITMAPINFOHEADER))  {     fclose(fe);     return FALSE;   }

 // write RGBQUAD  if(bitcount == 8)  {    rgbquad[3] = 0;   for(i = 0; i < index; i++)   {      rgbquad[0] = rgbquad[1] = rgbquad[2] = i;      if(fwrite((void*)rgbquad, 1, sizeof(RGBQUAD), fe) != sizeof(RGBQUAD))      {        fclose(fe);         return FALSE;     }    }  }

 if(bitcount == 1)  {          rgbquad[3] = 0;    for(i = 0; i < index; i++)    {      rgbquad[0] = rgbquad[1] = rgbquad[2] = (256 - i)%256;     if(fwrite((void*)rgbquad, 1, sizeof(RGBQUAD), fe) != sizeof(RGBQUAD))    {       fclose(fe);         return FALSE;      }    }  }      // write ImageData   if(fwrite((void *)pData,1,height * widthbytes,fe) != height * widthbytes)  {    fclose(fe);     return FALSE;   }   fclose(fe);   return TRUE; }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值