RGB565格式数据保存为位图

       生成bmp格式文件,关键是配置好文件头,信息头,以及相应的调色板。RGB565格式,一个像素用一个字(WORD,两个字节)数据表示,依次R--5bits  G---6bits  B---5bits。

       其实对于文件头以及相应信息头按部就班就好了,关键还是调色板的设置。根据

       #define RGB565_MASK_RED 0xF800
       #define RGB565_MASK_GREEN 0x07E0
       #define RGB565_MASK_BLUE 0x001F

       可以组合使用掩码和位移操作来渲染整个图。

     

  BITMAPFILEHEADER bfh;
  //memset(&bfh,0,sizeof(BITMAPFILEHEADER));
  bfh.bfType   = 0x4d42;   //"BM"
  bfh.bfOffBits  = sizeof(BITMAPFILEHEADER) +sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD)*3; //+ dwRgbQuadSize;
  bfh.bfSize   = bfh.bfOffBits + imageSize ;//+ dwRgbQuadSize;//614454
  bfh.bfReserved1  = 0;
  bfh.bfReserved2  = 0;
  
  BITMAPINFO *bmpinfo = (BITMAPINFO *)malloc(sizeof(BITMAPINFO)+sizeof(RGBQUAD)*3);
  memset(bmpinfo,0,sizeof(BITMAPINFO)+sizeof(RGBQUAD)*3);
  bmpinfo->bmiHeader.biSize  = sizeof(BITMAPINFOHEADER);
  bmpinfo->bmiHeader.biWidth  = Width;
  bmpinfo->bmiHeader.biHeight  = -Height;
  bmpinfo->bmiHeader.biBitCount = BitCount;
  bmpinfo->bmiHeader.biPlanes  = 1;
  bmpinfo->bmiHeader.biCompression = BI_BITFIELDS;//BitCompression;//3

  bmpinfo->bmiColors[0].rgbBlue  = 0;
  bmpinfo->bmiColors[0].rgbGreen  = 0xF8;
  bmpinfo->bmiColors[0].rgbRed  = 0;
  bmpinfo->bmiColors[0].rgbReserved = 0;

  bmpinfo->bmiColors[1].rgbBlue  = 0xE0;
  bmpinfo->bmiColors[1].rgbGreen  = 0x07;
  bmpinfo->bmiColors[1].rgbRed  = 0;
  bmpinfo->bmiColors[1].rgbReserved = 0;

  bmpinfo->bmiColors[2].rgbBlue  = 0x1F;
  bmpinfo->bmiColors[2].rgbGreen  = 0;
  bmpinfo->bmiColors[2].rgbRed  = 0;
  bmpinfo->bmiColors[2].rgbReserved = 0;

  FILE *finput;
  finput = _tfopen(L"a.bmp",L"w+b");
  fwrite(&bfh,sizeof(BITMAPFILEHEADER),1,finput);
  fwrite(bmpinfo,sizeof(BITMAPINFO)+3*sizeof(RGBQUAD),1,finput);
  fwrite(pBufferOut,imageSize,1,finput);

  fclose(finput);
  free(bmpinfo);
  finput = NULL;

 

你可能感兴趣的:(图像处理)