【vc++精品源码栏目提醒】:网学会员鉴于大家对vc++精品源码十分关注,论文会员在此为大家搜集整理了“VC中保存BMP位图文件的方法及BMP文件格式带源码实现 - 培训资料”一文,供大家参考学习
本文由1989cbl贡献 doc文档可能在WAP端浏览体验不佳。
建议您优先选择TXT或下载源文件到本机查看。
include stdio.h include Windows.h //几个全局变量存放读入图像 位图数据 图像的位图数据宽高颜色表及每像素所占位数比特 图像 位图数据 //此处定义全局变量主要为了后面的图像数据访问及图像存储作准备 unsigned char pBmpBuf//读入图像数据的指针 int bmpWidth//图像的宽 int bmpHeight//图像的高 RGBQUAD pColorTable//颜色表指针 int biBitCount//图像类型 bool readBmpchar bmpName //二进制读方式打开指定的图像文件 FILE fpfopenbmpNamerb iffp0 return 0 //跳过位图文件头结构 BITMAPFILEHEADER fseekfp sizeofBITMAPFILEHEADER0 //定义位图信息头结构变量读取位图信息头进内存存放在变量 head 中 BITMAPINFOHEADER head freadhead sizeofBITMAPINFOHEADER 1fp //获取图像宽高每像素所占位数等信息 bmpWidth head.biWidth bmpHeight head.biHeight biBitCount head.biBitCount //定义变量计算图像每行像素所占的字节数必须是 4 的倍数 int lineBytebmpWidth biBitCount/83/44 //灰度图像有颜色表且颜色表表项为 256 ifbiBitCount8 //申请颜色表所需要的空间读颜色表进内存 pColorTablenew RGBQUAD256 freadpColorTablesizeofRGBQUAD256fp //申请位图数据所需要的空间读位图数据进内存 pBmpBufnew unsigned charlineByte bmpHeight freadpBmpBuf1lineByte bmpHeightfp //关闭文件 fclosefp return 1 bool saveBmpchar bmpName unsigned char imgBuf int width int height int biBitCount RGBQUAD pColorTable //如果位图数据指针为 0则没有数据传入函数返回 ifimgBuf return 0 //颜色表大小以字节为单位灰度图像颜色表为 1024 字节彩色图像颜色表大小为 0 int colorTablesize0 ifbiBitCount8 colorTablesize1024 //待存储图像数据每行字节数为 4 的倍数 int lineBytewidth biBitCount/83/44 //以二进制写的方式打开文件 FILE fpfopenbmpNamewb iffp0 return 0 //申请位图文件头结构变量填写文件头信息 BITMAPFILEHEADER fileHead fileHead.bfType 0x4D42//bmp 类型 //bfSize 是图像文件 4 个组成部分之和 fileHead.bfSize sizeofBITMAPFILEHEADER sizeofBITMAPINFOHEADER colorTablesize lineByteheight fileHead.bfReserved1 0 fileHead.bfReserved2 0 //bfOffBits 是图像文件前三个部分所需空间之和 fileHead.bfOffBits54colorTablesize //写文件头进文件 fwritefileHead sizeofBITMAPFILEHEADER1 fp //申请位图信息头结构变量填写信息头信息 BITMAPINFOHEADER head head.biBitCountbiBitCount head.biClrImportant0 head.biClrUsed0 head.biCompression0 head.biHeightheight head.biPlanes1 head.biSize40 head.biSizeImagelineByteheight head.biWidthwidth head.biXPelsPerMeter0 head.biYPelsPerMeter0 //写位图信息头进内存 fwritehead sizeofBITMAPINFOHEADER1 fp //如果灰度图像有颜色表写入文件 ifbiBitCount8 fwritepColorTable sizeofRGBQUAD256 fp //写位图数据进文件 fwriteimgBuf heightlineByte 1 fp //关闭文件 fclosefp return 1 //调色板与灰度图像的关系 void main //读入指定 BMP 文件进内存 char readPathtarret.BMP readBmpreadPath //输出图像的信息 printfwidthdheightdbiBitCountdnbmpWidthbmpHeightbiBit Count //改变灰度图像的颜色表蓝色分量的值察看前后变化 ifbiBitCount8 forint i0 i