普通的写文件就行,
文件开头写上"MB",
填充BITMAPFILEHEADER和BITMAPINFOHEADER,将这两个头写进去
写图像数据

解决方案 »

  1.   

    提供一个写bmp文件的函数:
    int LQwrite_bmp(char* filename,uint8_t *pRGBBuffer,int width,int height,int ibitCount)
    {
        BITMAPFILEHEADER bmpheader;
        BITMAPINFO bmpinfo;
        FILE *fp;    fp = fopen(filename,"wb");
        if(!fp)return -1;    bmpheader.bfType = ('M'<<8)|'B';
        bmpheader.bfReserved1 = 0;
        bmpheader.bfReserved2 = 0;
        bmpheader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
        bmpheader.bfSize = bmpheader.bfOffBits + width*height*ibitCount/8;
            
        bmpinfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
        bmpinfo.bmiHeader.biWidth = width;
        bmpinfo.bmiHeader.biHeight = height;
        bmpinfo.bmiHeader.biPlanes = 1;
        bmpinfo.bmiHeader.biBitCount = ibitCount;
        bmpinfo.bmiHeader.biCompression = BI_RGB;
        bmpinfo.bmiHeader.biSizeImage = 0;
        bmpinfo.bmiHeader.biXPelsPerMeter = 100;
        bmpinfo.bmiHeader.biYPelsPerMeter = 100;
        bmpinfo.bmiHeader.biClrUsed = 0;
        bmpinfo.bmiHeader.biClrImportant = 0;    fwrite(&bmpheader,sizeof(BITMAPFILEHEADER),1,fp);
        fwrite(&bmpinfo.bmiHeader,sizeof(BITMAPINFOHEADER),1,fp);
        fwrite(pRGBBuffer,width*height*ibitCount/8,1,fp);
        fclose(fp);    return 0;
    }
      

  2.   

    填充BITMAPFILEHEADER和BITMAPINFOH
    如何是小于24位的位图还需要把系统当前调色板拷贝到BITMAPINFO.bmiColors中
      

  3.   

    1. 先用GetDIBits由DDB转化成DIB;
    2. 加上 BITMAPFILEHEADER 和 BITMAPINFO 就是bmp文件的内容了.