c语言读取bmp

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();
}

猜你喜欢

转载自blog.csdn.net/nineship/article/details/104740367
今日推荐