ROOTStudy

木曜日, 12月 14, 2006

簡易DICOM画像の読み込み

void Read(char *filename)
{
//まず16bit、白黒データのみを対象とする
//残りのフォーマットは関数のオーバーロードで対処
//example:
//Read("sample1.dcm");
//
long i, j;
FILE *ar;
long k;
unsigned short wd;
unsigned short shift = 256;
sprintf(fname, "%s", filename);
ar = fopen(filename, "rb"); //rでなくrbに注意
k = sizeof(unsigned short);
long sizex = 512; //横方向pixel
long sizey = 512; //縦方向pixel
long xy[512][512]; //読み込むファイル
long upperlimit = 60000;
printf("size = %ld\n", k);
printf("ar = %ld\n", ar);
printf("eof = %d\n", EOF);

if(ar != 0){
printf("filename = %s\n", filename);
fread(&wd, sizeof(unsigned short),1, ar);
printf("wd = %d\n", wd);
while(wd!=32736){ //0x7FE0まで空読み
fread(&wd, sizeof(unsigned short),1, ar);
}
while(wd!=16){ //0x0010まで空読み {7FE0,0010}はPixelDataの開始
fread(&wd, sizeof(unsigned short),1, ar);
}
for(i = 0; i < sizey; i++){
for(j = 0; j < sizex; j++){
fread(&wd, sizeof(unsigned short),1, ar);
if(wd > upperlimit){wd = 0;}
xy[j][i] = wd;
}
}
printf("read finish.\n");
fclose(ar);
}
else{printf("file not readed.\n");}
}