19,464
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<math.h>
#include<iostream>
#include<bitset>
using namespace std;
void main(){
FILE *fp,*fq,*ft;
int i;
int k=132; //位图字节数 ,t[132]={0}
char head[62]={0},body[133]={0};
bitset <8> b;
//读实际位图bit数据
fp=fopen("c:/temp/bmp/BMP-1.bmp","rb");
for(i=0;i<62;i++) //读位图头的字节
head[i]=fgetc(fp);
for(i=0;i<133;i++) //读位图图字节
body[i]=fgetc(fp);
//实际位图bit输出到屏幕
cout<<"实际位图bit输出到屏幕"<<endl;
for(i=1;i<=32;i++){
k=k-4;
for(int j=0;j<4;j++){
bitset<8> b(body[k+j]);
cout<<b;
}
cout<<endl;
}cout<<endl<<"修改后输出到屏幕:"<<endl;
//实际位图bit存入磁盘c:/temp/bmp/bmp-1-1.bmp
fq=fopen("c:/temp/bmp/bmp-1-1.bmp","w");
for(i=0;i<62;i++) fputc(head[i],fq);
for(i=0;i<132;i++)fputc(body[i],fq);
fputc(body[132],fq);
//位图数据处理,将每个字节末位置'0'
for(i=0;i<132;i++){
unsigned int t=body[i];
t=t&254;
char c=t;
body[i]=c;
}
//修改后位图bit输出到屏幕;
for(k=132,i=1;i<=32;i++){
k=k-4;
for(int j=0;j<4;j++){
bitset<8> b(body[k+j]);
cout<<b;
}
cout<<endl;
}
//修改末字节后存入磁盘c:/temp/bmp/bmp-1-2.bmp
ft=fopen("c:/temp/bmp/bmp-1-2.bmp","wb");
for(i=0;i<62;i++) fputc(head[i],ft);
for(i=0;i<132;i++)fputc(body[i],ft);
fputc(body[132],ft);
fclose (fp);
fclose (ft);
}