www.pudn.com > buildct.zip > BmpRead.cpp, change:2004-02-22,size:3262b
// BmpRead.cpp: implementation of the CBmpRead class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "buildct.h"
#include "BmpRead.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CBmpRead::CBmpRead()
{
}
CBmpRead::~CBmpRead()
{
}
int CBmpRead::bytes_Line(BITMAPINFOHEADER bmiHeader)
{
int n;
n=bmiHeader.biWidth*bmiHeader.biBitCount;
n=((n+31)/32)*4;
return n;
}
/* 处理一行*/
void CBmpRead::out_Line(char *ptr,FILE * outfile,int biWidth)
{
BYTE bit[8]={128, 64, 32, 16, 8, 4, 2, 1};
if(outfile==NULL)return;
int i, j;
char *line=(char *)malloc(biWidth+1);
for(j=0,i=0; j<8,i<biWidth; j++,i++)
{
int bt0=((ptr[i/8] & bit[j])!=0)?1:0;
*(line+i)=bt0;
}
//filter(line);
for(i=0; i<biWidth; i++)
{
fprintf(outfile,"%1d ",*(line+i));
}
fprintf(outfile,"\n");
free(line);
}
/*读入一幅断层扫描图*/
int CBmpRead::readImage(char *inname,char *outname , unsigned char buffer[][IMAGEW/8])
{
BITMAPFILEHEADER bmfHeader;
BITMAPINFOHEADER bmiHeader;
RGBQUAD *bmiColor=new RGBQUAD();
int nColors=1, bytes_line, i,j;
char *ptr;
int re=0;
//char outname[]="dt.tst";
FILE *infile,*outfile;
infile=fopen(inname,"rb");
if(infile==NULL)
{
printf("Open bit bitmap file failed!");
re=-1;
return -1;
}
outfile=NULL;
if(outname!=NULL)
{
//printf("open out file ignored!");
//outname="";
outfile=fopen(outname,"wt");
}
fread(&bmfHeader, sizeof(bmfHeader), 1, infile);
fread(&bmiHeader, sizeof(bmiHeader), 1, infile);
if(bmiHeader.biBitCount!=1 )
{
printf("位图不是黑白的 或大小不符合(512*512),w=%d,h=%d\n",bmiHeader.biWidth,bmiHeader.biHeight);
fclose(infile);
if(outfile!=NULL) fclose(outfile);
return -2;
}
//printf("Image width: %d height: %d \n",bmiHeader.biWidth,bmiHeader.biHeight);
fread(bmiColor, sizeof(RGBQUAD), nColors, infile);
bytes_line=bytes_Line(bmiHeader);
ptr=(char *)malloc(bytes_line);
fseek(infile, bmfHeader.bfOffBits , SEEK_SET);
for(i=0; i<bmiHeader.biHeight; i++)
{
fread(ptr,bytes_line, 1, infile);
if(outfile!=NULL)out_Line(ptr,outfile,bmiHeader.biWidth);
/*
for(j=0,i=0; j<8,i<bmiHeader.biWidth; j++,i++)
{
int bt0=(ptr[i/8]&bit[j]!=0)?1:0;
//*(line+i)=bt0;
buffer[i][j]=bt0;
}
//printf("eee\n");
*/
for(j=0;j<bmiHeader.biWidth/8;j++)
{
//if(ptr[j]!=0)printf("ptr=%d\n",ptr[j]);
buffer[i][j]=ptr[j];
//if(buffer[i][j]!=0)printf("val=%d\n",buffer[i][j]);
}
}
//printf("end!\n");
fclose(infile);
if(outfile!=NULL)
fclose(outfile);
return re;
}