把BMP文件调入到Memory中

        在学习了图像处理课程后,我对相关代码也产生了一定的兴趣,以下是通过课程学习和查询相关资料后得到的关于如何把BMP文件调入到Memory中的代码:

第一步,读取BITMAPFILEHEADER,判断是不是BMP文件,即bfTYpe!=0x4D42和bfSize!=FileSize时退出

#include“stdio.h”
#include“windows.h”

intiImageh=0,iImagew=0;
intiYRGBnum=1;//1:8位灰度,3:24位彩色
RGBQUADrgbPalette[256];
BYTE*pImageData=NULL;

voidmain(){
    char*cfilename=“1.bmp”;
    FILE*f=NULL;
    f=fopen(cFilename,"r+b");
    if(f==NULL)return;
    fseek(f,0,SEEK_END);
    intflen=ftell(f);
    BITMAPFILEHEADERfh;
    fseek(f,0,SEEK_SET);
    fread(&fh,sizeof(BITMAPFILEHEADER),1,f);
    if(fh.bfType!=0x4d42){//”BM”
        fclose(f);
        return;
    }
    if(fh.bfSize!=flen){
        fclose(f);
        return;
    }

接着读入BITMAPINFOHEADER,获得核心参数biWidth,biHeight,biBitCount

BITMAPINFOHEADERih;
fread(&ih,sizeof(BITMAPINFOHEADER),1,f);
if(ih.biBitCount!=8){//只调用灰度
    fclose(f);return;
}

iYRGBnum=ih.biBitCount/8;//1
iImagew=ih.biWidth;
iImageh=ih.biHeight;

if(iYRGBnum==1){
    fread(rgbPalette,sizeof(RGBQUAD),256,f);
}

读入调色板RGBQUAD[256]

intsize=iImagew*iImageh*iYRGBnum;
if(pImageData){
    delete[]pImageData;
    pImageData=NULL;
}
pImagedata=newBYTE[size];
if(pImagedata)
    memset(pImagedata,0,size);
else{
    fclose(f);
    return;
}

读入数据包,倒序读入文件中行的字节数与Memory行的字节数

intw4b=(iImagew*iYRGBnum+3)/4*4;
BYTE*ptr=new[w4b];
if(ptr==NULL){
    fclose(f);
    return;
}

inti=0;
BYTE*p=NULL;
for(i=iImageh-1;i>=0;i--){
    fread(ptr,w4b,1,f);
    p=pImageData+i*iImagew;
    memmove(p,ptr,imagew);
}
delete[]ptr;

intj;
for(i=0;i<iImageh;i++){
    p=pImageData+i*iImageW;
    for(j=0;j<iImagew;j++){
        printf(“%i\n”,*(p+j));
    }
    printf(“\n”);
}

代码结尾:

    fclose(f);
    if(pImageData){
        delete[]pImageData;
    }
    printf(“Thisistheend!”);
}

以上就是关于如何将BMP文件调入到Memory中的代码,希望对uu有所帮助

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值