64,654
社区成员
发帖
与我相关
我的任务
分享
// BMP头
typedefstructtagBITMAPFILEHEADER
{
WORDbfType;//位图文件的类型,必须为BM(1-2字节)
DWORDbfSize;//位图文件的大小,以字节为单位(3-6字节,低位在前)
WORDbfReserved1;//位图文件保留字,必须为0(7-8字节)
WORDbfReserved2;//位图文件保留字,必须为0(9-10字节)
DWORDbfOffBits;//位图数据的起始位置,以相对于位图(11-14字节,低位在前)
//文件头的偏移量表示,以字节为单位
}BITMAPFILEHEADER;
// BMP位信息头
typedefstructtagBITMAPINFOHEADER{
DWORDbiSize;//本结构所占用字节数(15-18字节)
LONGbiWidth;//位图的宽度,以像素为单位(19-22字节)
LONGbiHeight;//位图的高度,以像素为单位(23-26字节)
WORDbiPlanes;//目标设备的级别,必须为1(27-28字节)
WORDbiBitCount;//每个像素所需的位数,必须是1(双色),(29-30字节)
//4(16色),8(256色)16(高彩色)或24(真彩色)之一
DWORDbiCompression;//位图压缩类型,必须是0(不压缩),(31-34字节)
//1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一
DWORDbiSizeImage;//位图的大小(其中包含了为了补齐行数是4的倍数而添加的空字节),以字节为单位(35-38字节)
LONGbiXPelsPerMeter;//位图水平分辨率,每米像素数(39-42字节)
LONGbiYPelsPerMeter;//位图垂直分辨率,每米像素数(43-46字节)
DWORDbiClrUsed;//位图实际使用的颜色表中的颜色数(47-50字节)
DWORDbiClrImportant;//位图显示过程中重要的颜色数(51-54字节)
}BITMAPINFOHEADER;
参考:http://baike.baidu.com/subview/7671/8245150.htm?fr=aladdin
你把两个头信息加上颜色索引表剩余的就是位图像素数据,通过读写文件,提取信息,然后取得像素数据!
1.如果位图不使用颜色索引,则用像素数据使用 3 byte 存储一个像素点RGB,根据你的算法求出指定矩形在该数据集合中的
索引然后直接用你指定颜色值替代(RGB值,如白色 255,255,255)!
2.如果使用颜色索引表,则增加或者查找颜色索引表是否有你指定颜色值,如果没有则增加一个索引,然后根据你的算法可知需要替换的数据的位置,修改索引指向!
把你的文件头,位信息头,颜色索引表(有可能增加一个索引,记得修改位信息头),像素数据等安装顺序写入到新文件,完毕!