windows 保存rgb数据为bmp文件

//构建BMP位图文件头  
void ContructBhh(int nWidth,int nHeight,BITMAPFILEHEADER& bhh) //add 2010-9-04  
{  
    int widthStep = (((nWidth * 24) + 31) & (~31)) / 8 ; //每行实际占用的大小(每行都被填充到一个4字节边界)  
    bhh.bfType = ((WORD) ('M' << 8) | 'B');  //'BM'  
    bhh.bfSize = (DWORD)sizeof(BITMAPFILEHEADER) + (DWORD)sizeof(BITMAPINFOHEADER) + widthStep * nHeight;  
    bhh.bfReserved1 = 0;  
    bhh.bfReserved2 = 0;  
    bhh.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) + (DWORD)sizeof(BITMAPINFOHEADER);  

}  


//构建BMP文件信息头  
void ConstructBih(int nWidth,int nHeight,BITMAPINFOHEADER& bih)   
{  
    int widthStep = (((nWidth * 24) + 31) & (~31)) / 8 ;   

    bih.biSize=40;       // header size  
    bih.biWidth=nWidth;  
    /注意BMP在y方向是反着存储的,一次必须设置一个负值,才能使图像正着显示出来
    bih.biHeight=-nHeight;  
    bih.biPlanes=1;  
    bih.biBitCount=24;     // RGB encoded, 24 bit  
    bih.biCompression=BI_RGB;   // no compression 非压缩  
    bih.biSizeImage=widthStep*nHeight*3;  
    bih.biXPelsPerMeter=0;  
    bih.biYPelsPerMeter=0;  
    bih.biClrUsed=0;  
    bih.biClrImportant=0;  



//iWidth:图像宽; iHeight:图像高;pBuffer:图像RGB数据;filePath:存储路径;fileName:保存文件名;fileNum:保存文件编号  
//SaveDIB2Bmp(100, "frame", "D://screenshot")  
bool SaveDIB2Bmp(int fileNum, const char * fileName, const char * filePath, int iWidth, int iHeight, BYTE *pBuffer)  
{  

    BITMAPINFOHEADER bih;  
    ConstructBih(iWidth,iHeight,bih);  
    BITMAPFILEHEADER bhh;  
    ContructBhh(iWidth,iHeight,bhh);  

    TCHAR BMPFileName[1024];  
    int widthStep = (((iWidth * 24) + 31) & (~31)) / 8 ; //每行实际占用的大小(每行都被填充到一个4字节边界)  
    int DIBSize = widthStep * iHeight ;  //buffer的大小 (字节为单位)  

    //save 

    FILE * fp = fopen("a.bmp","wb" );  
    if( !fp ) return false;

    fwrite(&bhh, 1,sizeof(bhh),fp);  
    fwrite(&bih, 1,sizeof(bih),fp);  
    //fwrite( &bih, sizeof(BMPINFOHEADER_T),1,fp );  
    fwrite(pBuffer,1,DIBSize,fp);  
    fclose( fp );

    return false;  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值