#include <stdio.h>
#include <stdlib.h>
#include<Windows.h>
struct color{
unsigned char red;
unsigned char green;
unsigned char blue;
}color;
void main()
{
BITMAPFILEHEADER file;
BITMAPINFOHEADER info;
FILE *p,*p1;
int i,j;
long x,y;
struct color temp[20000];
FILE *FileNumber;//文件号
errno_t Error;//fopen_s用,需要的错误信息
p=fopen("文件絕對路徑","r+");
fread(&file,sizeof(BITMAPFILEHEADER),1,p);//头文件的读取与存储
fread(&info,sizeof(BITMAPINFOHEADER),1,p);
//fwrite(&file,sizeof(BITMAPFILEHEADER),1,p1);
//fwrite(&info,sizeof(BITMAPINFOHEADER),1,p1);
y=info.biHeight;//读取文件高度
x=info.biWidth;//读取文件宽度
//printf("%d %d\n",x,y);
//if(file.bfType!=0x4d42)
//{
// //检验是否为bmp文件
// printf("不是bmp图片\n");
// return;
//}
j=1;
//for(i=1;i<=(int)x*(int)y*3;i=i+3)
for(i=1;i<=250;i=i++)
{
fread(&color,sizeof(struct color),1,p);
/*temp[i].blue=color.blue;
temp[i+1].green=color.green;
temp[i+2].red=color.red;*/
printf("%x, %x, %x, %d\n",color.blue,color.green,color.red,i);
}
//for(i=1;i<=x;i++)
//{//用for循环读取像素(这个bmp为24位,所以没有颜色表)
// for(j=1;j<=y;j++)
// {
// fread(&color,sizeof(struct color),1,p);
// temp[i][j].blue=color.blue;
// temp[i][j].green=color.green;
// temp[i][j].red=color.red;
// printf("%x, %x, %x\n",color.blue,color.green,color.red);
// }
//}
//for(i=1;i<=x;i++){//读取之后再存入文件
// for(j=1;j<=y;j++){
// fwrite(&temp[i][j],sizeof(struct color),1,p1);
// }
//}
/*fclose(p1);*/
fclose(p);
getchar();
}
我用了一张小图片,讀出來色碼是完全正確的
但用了大圖片,色碼完全出錯
這兩張圖片給各位大牛試試
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)