code
#include "stdio.h"
#include <windows.h>
void read_bmp()
{
FILE *fp=NULL;
fp = fopen("p.bmp","rb");
if(fp==0)
{
return ;
}
BITMAPFILEHEADER fileheader={0};
fread(&fileheader,sizeof(fileheader),1,fp);
if(fileheader.bfType!=0x4D42)
{
fclose(fp);
return ;
}
BITMAPINFOHEADER head;
fread(&head,sizeof(BITMAPINFOHEADER),1,fp);
long bmpWidth = head.biWidth;
long bmpHeight = head.biHeight;
WORD biBitCount = head.biBitCount;
if(biBitCount != 24)
{
printf("请选择24位位图!");
fclose(fp);
return ;
}
int totalSize = (bmpWidth *biBitCount/8+3)/4*4*bmpHeight;
BYTE *pBmpBuf = new BYTE[totalSize];
size_t size = 0;
while(true)
{
int iret = fread(&pBmpBuf[size],1,1,fp);
if(iret == 0)
break;
size = size + iret;
}
fclose(fp);
int i,j;
int pitch=bmpWidth%4;
for(i=0;i<bmpHeight;i++)
{
int realPitch=i*pitch;
for(j=0;j<bmpWidth;j++)
{
printf("%d\n",pBmpBuf[(i*bmpWidth+j)*3+2+realPitch]);
printf("%d\n",pBmpBuf[(i*bmpWidth+j)*3+realPitch]);
printf("%d\n",pBmpBuf[(i*bmpWidth+j)*3+realPitch]);
}
}
delete [] pBmpBuf; pBmpBuf = NULL;
return ;
}
int main()
{
read_bmp();
}