24位和8位BMP图片保存纯C代码
2013-11-15 13:58
507 查看
BMP图片大家都知道,可以通过查看BMP图片结构使用纯C就可以打开,编辑,处理,保存图片。非常方便使用。
具体BMP结构可以参考:wingdi.h头文件。今天主要在进行删减代码,需要把多余的代码删除,之前写的保存bmp代码就此贴在这里留着以后需要的时候使用:
8位BMP图片保存代码:
24位BMP图片保存代码:
使用例子:
SaveMatrixToGrayBmp("./mid/Gray.bmp", Gray, iWidth, iHeight)
SaveRGBMatrixToColorBmp("./mid/Img.bmp", Img, iWidth, iHeight)
具体BMP结构可以参考:wingdi.h头文件。今天主要在进行删减代码,需要把多余的代码删除,之前写的保存bmp代码就此贴在这里留着以后需要的时候使用:
8位BMP图片保存代码:
BOOL SaveMatrixToGrayBmp(char* sBMPFile, //name of BMP file BYTE *pMatrix, // pointer to Matrix Bits array int bmpWidth , int bmpHeight // width and height of the bmp ) { FILE* fp; int bytesofScanLine,i,j; DWORD dwFileSize; BITMAPFILEHEADER bmfHeader; BITMAPINFOHEADER bmiHeader; RGBQUAD bmiColors[256]; BYTE tempb=0; fp = fopen(sBMPFile, "wb"); bytesofScanLine=(bmpWidth % 4==0) ? bmpWidth: ((bmpWidth+3)/4*4); dwFileSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*256+bytesofScanLine*bmpHeight; bmfHeader.bfType=((WORD) ('M' << 8) | 'B'); bmfHeader.bfSize=dwFileSize; bmfHeader.bfReserved1=0; bmfHeader.bfReserved2=0; bmfHeader.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*256; fwrite(&bmfHeader,sizeof(bmfHeader), 1, fp); // fill the bmp file Infomation Header. bmiHeader.biSize=sizeof(BITMAPINFOHEADER); bmiHeader.biWidth=bmpWidth; bmiHeader.biHeight=bmpHeight; bmiHeader.biPlanes=1; bmiHeader.biBitCount=8; bmiHeader.biCompression=BI_RGB; bmiHeader.biSizeImage=0; bmiHeader.biXPelsPerMeter=0; bmiHeader.biYPelsPerMeter=0; bmiHeader.biClrUsed=256; bmiHeader.biClrImportant=256; fwrite(&bmiHeader,sizeof(bmiHeader), 1, fp); // fill the color tables. for (i=0; i<256 ; i++) { bmiColors[i].rgbBlue=(BYTE)(i); bmiColors[i].rgbGreen=(BYTE)(i); bmiColors[i].rgbRed=(BYTE)(i); bmiColors[i].rgbReserved=0; } fwrite(&(bmiColors[0]),sizeof(RGBQUAD)*256, 1, fp); // fill the BMP data to file for (j=bmpHeight-1 ; j>=0 ; j--) { fwrite((pMatrix+(j*bmpWidth)), 1, bmpWidth, fp); for (i=0; i<(bytesofScanLine-bmpWidth) ; i++) fwrite(&tempb, 1, 1, fp); } fclose(fp); return true; }
24位BMP图片保存代码:
BOOL SaveRGBMatrixToColorBmp(char* sBMPFile, //name of BMP file BYTE *pRGBMat, // pointer to DIB bits array int bmpWidth ,//width of the bmp int bmpHeight // height of the bmp ) { // create the empty 24bit color BMP file FILE* fp; fp = fopen(sBMPFile, "wb"); DWORD dwFileSize; BITMAPFILEHEADER bmfHeader; BITMAPINFOHEADER bmiHeader; int bytesofScanLine,i,j; bytesofScanLine=((bmpWidth*3) % 4==0) ? (bmpWidth*3): (4*int(bmpWidth*3/4)+4) ; dwFileSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER) +bytesofScanLine*fabs((double)bmpHeight); // fill the bmp file Header; bmfHeader.bfType=((WORD) ('M' << 8) | 'B'); bmfHeader.bfSize=dwFileSize; bmfHeader.bfReserved1=0; bmfHeader.bfReserved2=0; bmfHeader.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER) fwrite(&bmfHeader,sizeof(bmfHeader), 1, fp); // fill the bmp file Infomation Header. bmiHeader.biSize=sizeof(BITMAPINFOHEADER); bmiHeader.biWidth=bmpWidth; bmiHeader.biHeight= fabs((double)bmpHeight); bmiHeader.biPlanes=1; bmiHeader.biBitCount=24; bmiHeader.biCompression=BI_RGB; bmiHeader.biSizeImage=0; bmiHeader.biXPelsPerMeter=0; bmiHeader.biYPelsPerMeter=0; bmiHeader.biClrUsed=0; bmiHeader.biClrImportant=0; fwrite(&bmiHeader,sizeof(bmiHeader), 1, fp); // fill the BMP data to file BYTE dummy = 0; BYTE tempb=0; for (j=fabs((double)bmpHeight)-1; j>=0 ; j--) { fwrite((pRGBMat+j*3*bmpWidth), bmpWidth*3, 1, fp); if (bmpWidth*3 != bytesofScanLine) { for (i = 0; i<bytesofScanLine - bmpWidth*3; i++) fwrite(&dummy, 1, 1, fp); } } fclose(fp); return true; }
使用例子:
SaveMatrixToGrayBmp("./mid/Gray.bmp", Gray, iWidth, iHeight)
SaveRGBMatrixToColorBmp("./mid/Img.bmp", Img, iWidth, iHeight)
相关文章推荐
- OpenGL纹理贴图24位bmp图片,代码如下
- C#中按指定质量保存图片的实例代码 24位深度
- 24位RGB数据保存为BMP图片
- 使用ffmpeg将BMP图片编码为x264视频文件,将H264视频保存为BMP图片,yuv视频文件保存为图片的代码
- 纯C++代码实现将像素矩阵保存为bmp图片
- 24位RGB数据保存为BMP图片
- 2 4 8位BMP转24位BMP(代码)
- 24位RGB数据保存为BMP图片
- 24位真彩色位图转换成8位灰度图片的代码实现
- 24位真彩色位图转换成8位灰度图片的代码实现
- [代码收集] 窗口截屏并保存为bmp图片
- 使用ffmpeg将BMP图片编码为x264视频文件,将H264视频保存为BMP图片,yuv视频文件保存为图片的代码
- 使用ffmpeg将BMP图片编码为x264视频文件,将H264视频保存为BMP图片,yuv视频文件保存为图片的代码
- Android长按imageview把图片保存到本地的实例代码
- 8位灰度图像BMP的保存
- Android 截图 代码 截屏 保存图片到本地 根据本地图片路径 显示图片
- php将远程图片保存到本地服务器的实现代码
- 用qt代码怎样编写图片保存格式[qt4.6]
- C#保存PictureBox或Bitmap图片为bmp|png|gif|jpg格式