205 memset(&gr, 0,
sizeof(
WSGraph));
229 else if (hd.
depth<16){
237 for (i=0; i<xs*ys*zs; i++) gr.
gp[i] = (
uByte)hd.
grptr[i];
240 else if (hd.
depth>16){
260 rzm = (double)(rz[8])/rz[9];
261 if (rzm<1.0 && rzm>0.1)
set_RZxy(rzm);
296 memset(&gd, 0,
sizeof(
WSGraph));
298 if ((fp=fopen(fn,
"rb"))==NULL) {
329 memset(&gd, 0,
sizeof(
WSGraph));
367 memset(&gr, 0,
sizeof(
WSGraph));
388 else if (hd.
depth<16){
395 for (i=0; i<xs*ys*zs; i++) gr.
gp[i] = (
uByte)hd.
grptr[i];
398 else if (hd.
depth>16){
425 rzm = (double)(rz[8])/rz[9];
426 if (rzm<1.0 && rzm>0.1)
set_RZxy(rzm);
461 int i, j, k, l, linebyte, databyte, depth, lsize;
476 for (u=0; u<hd->
lsize; u++) ptr[u] = hd->
grptr[u];
481 if (obit==8) depth = 8;
490 memset(
buf, 0, lsize);
496 max =
Max(max, wp[i]);
499 buf[i] = 255*wp[i]/max;
517 databyte = hd->
xsize*depth/8;
518 linebyte = lsize/hd->
ysize;
521 lsize = linebyte*hd->
ysize;
533 ptr = (
uByte*)malloc(lsize);
539 memset(ptr, 0, lsize);
542 for (i=0 ; i<hd->
ysize; i++) {
543 for (j=0; j<databyte; j++) ptr[k++] =
buf[l++];
544 for (j=0; j<linebyte-databyte; j++) ptr[k++] = null;
551 fwrite(&shd,
sizeof(
RasHead), 1, fp);
552 fwrite(ptr, lsize, 1, fp);
591 int i, j, k, l, lsize;
599 ptr = (
sByte*)malloc(lsize);
604 memset(ptr, 0, lsize);
611 for(i=0; i<lsize; i++) ptr[i] = hd->
grptr[i];
624 if (hd->
depth < dbyte*8){
626 for (j=0; j<hd->
depth/8; j++) ptr[k++] = null;
627 for (j=hd->
depth/8; j<dbyte; j++)
628 ptr[k++] = hd->
grptr[l++];
631 else if (hd->
depth == dbyte*8) {
633 for (j=0; j<dbyte; j++) ptr[k++] = hd->
grptr[l++];
638 for (j=0; j<dbyte; j++) ptr[k++] = hd->
grptr[l++];
639 l += (hd->
depth)/8 - dbyte;
662 fwrite(&chd,
sizeof(
CTHead), 1, fp);
666 fwrite(ptr, lsize, 1, fp);
734 if ((fp=fopen(fn,
"rb"))==NULL) {
741 rs = fread(&hd.
entry, hsz, 1, fp);
749 if (fsz == (
int)(hsz + hd.
bsize + hd.
lsize) + 4 ) hsz = 36;
750 if (fsz == (
int)(hsz + hd.
bsize + hd.
lsize) + 16) hsz = 48;
752 if (fsz == (
int)(hsz + hd.
bsize + hd.
lsize)) {
765 rs = fread(hd.
buf, hd.
bsize, 1, fp);
818 if ((fp=fopen(fn,
"rb"))==NULL) {
825 rs = fread(&hd.
entry, hsz, 1, fp);
830 if (fsz == (
int)(hsz + hd.
bsize + hd.
lsize) + 4 ) hsz = 36;
831 if (fsz == (
int)(hsz + hd.
bsize + hd.
lsize) + 16) hsz = 48;
843 rs = fread(hd.
buf, hd.
bsize, 1, fp);
877 if ((fp=fopen(fn,
"rb"))==NULL) {
884 rs = fread(&hd.
entry, hsz, 1, fp);
889 if (fsz == (
int)(hsz + hd.
bsize + hd.
lsize) + 4 ) hsz = 36;
890 if (fsz == (
int)(hsz + hd.
bsize + hd.
lsize) + 16) hsz = 48;
902 rs = fread(hd.
buf, hd.
bsize, 1, fp);
911 if (hd.
grptr==NULL) {
977 rs = fread((
void*)hd.
buf, hd.
bsize, 1, fp);
980 if (hd.
grptr==NULL) {
987 fseek(fp, hd.
bsize, 0);
1026 int i, linebyte, databyte;
1037 rs = fread(&rhd, hd.
bsize, 1, fp);
1054 if (hd.
grptr==NULL) {
1067 if (databyte==linebyte) {
1071 for (i=0; i<hd.
ysize; i++) {
1072 rs = fread(
buf, databyte, 1, fp);
1073 rs = fread(null, linebyte-databyte, 1, fp);
1080 for(i=0; i<hd.
xsize*hd.
ysize; i++) wptr[i] = ntohs(wptr[i]);
1112 rs = fread((
void*)&chd, hd.
bsize, 1, fp);
1131 if (hd.
grptr==NULL) {
1138 fseek(fp, hd.
bsize, 0);
1142 for (i=0; i<hd.
xsize*hd.
ysize; i++) wptr[i] = ntohs(wptr[i]);
1170int dicom_header(FILE* fp,
int fsize,
int* dsize,
int* xsize,
int* ysize,
int* depth,
double* rzxy)
1172 int i, j, sz, rp, ef;
1174 int xs = 0, ys = 0, dp = 0;
1183 if (rzxy!=NULL) *rzxy = 0.0;
1189 rp = (int)fread(&dt,
sizeof(
uWord), 1, fp);
1190 while(!feof(fp) && ef!=
ON) {
1193 rp += (int)fread(&dt,
sizeof(
uWord), 1, fp);
1196 rp += (int)fread(&cn,
sizeof(
uWord), 2, fp);
1199 rp += (int)fread(&cn,
sizeof(
uWord), 2, fp);
1201 hsize = rp*
sizeof(
uWord);
1202 if (fsize>=*dsize+hsize) {
1209 hsize = rp*
sizeof(
uWord);
1210 if (fsize>=*dsize+hsize) {
1217 rp += (int)fread(&dt,
sizeof(
uWord), 1, fp);
1222 sz = rp*
sizeof(
uWord);
1223 wp = (
uWord*)malloc(sz);
1233 rs = fread(wp, sz, 1, fp);
1235 for (i=0; i<sz/2-3; i++) {
1244 memset(rx, 0,
LNAME);
1245 memset(ry, 0,
LNAME);
1248 else ln = *(
int*)&wp[i+2];
1251 bp = (
uByte*)&wp[i+4];
1253 while (j<ln-1 && bp[j]!=
'\\') {
1260 while (j<ln-1 && bp[j]!=
' ') {
1264 if (!strcmp(rx, ry)) {
1273 else ln = *(
int*)&wp[i+2];
1275 xs = (int)*(
sWord*)&wp[i+4];
1278 xs = *(
int*)&wp[i+4];
1285 else ln = *(
int*)&wp[i+2];
1287 ys = (int)*(
sWord*)&wp[i+4];
1290 ys = *(
int*)&wp[i+4];
1297 else ln = *(
int*)&wp[i+2];
1299 dp = (int)*(
sWord*)&wp[i+4];
1302 dp = *(
int*)&wp[i+4];
1309 if (rzxy!=NULL) *rzxy = rz;
1310 if (xsize!=NULL) *xsize = xs;
1311 if (ysize!=NULL) *ysize = ys;
1312 if (depth!=NULL) *depth = dp;
1324 int sz, fsize, dsize, xsize, ysize, depth;
1332 memset(&vp, 0,
sizeof(
WSGraph));
1340 if ((fp=fopen(fn,
"rb"))==NULL) {
1345 sz =
dicom_header(fp, fsize, &dsize, &xsize, &ysize, &depth, &rzxy);
1352 DEBUG_MODE PRINT_MESG(
"read_dicom_file: xsize = %d, ysize = %d, depth = %d, RZxy = %f\n", xsize, ysize, depth, rzxy);
1355 if (dsize!=xsize*ysize*((depth+7)/8)) {
1362 if ((depth+7)/8!=2) {
1376 rs = fread(vp.
gp, dsize, 1, fp);
unsigned short uWord
2Byte
#define checkBit(dat, bit)
WSGraph make_WSGraph(int xs, int ys, int zs)
void set_RZxy(double rzm)
void init_CmnHead(CmnHead *hd)
void free_CmnHead(CmnHead *hd)
CmnHead read_ras_data(FILE *fp)
readRasData() for C++
CmnHead read_cmn_header(const char *fn)
WSGraph read_wsg_file(const char *fname)
int write_file_rb(const char *fname, WSGraph gr, IRBound rb)
int write_ras_file_obit(const char *fn, CmnHead *hd, int obit)
int write_ct_file(const char *fn, CmnHead *hd)
int write_cmn_file(const char *fn, CmnHead *hd)
int write_wsg_file(const char *fname, WSGraph gr)
WSGraph read_wsg_file_rb(const char *fname, IRBound *rb)
WSGraph read_dicom_file(const char *fn)
CmnHead read_xxx_file(const char *fn)
WSGraph read_ras_file(const char *fn)
int write_ras_file(const char *fname, WSGraph gr)
CmnHead read_ct_data(FILE *fp)
readCTData() for C++
CmnHead read_cmn_file(const char *fn)
CmnHead read_user_data(FILE *fp, CmnHead *chd)
readUserSetData() for C++
int dicom_header(FILE *fp, int fsize, int *dsize, int *xsize, int *ysize, int *depth, double *rzxy)
#define JBXL_GRAPH_IVDARG_ERROR
無効な引数
#define JBXL_GRAPH_OPFILE_ERROR
ファイルのオープンエラー
#define JBXL_GRAPH_NOFILE_ERROR
ファイルが存在しない
#define JBXL_GRAPH_HEADER_ERROR
画像ヘッダーのエラー
#define JBXL_GRAPH_MEMORY_ERROR
メモリエラー
unsigned int lsize
Size of Graphics Data (byte unit)
uByte * buf
Ture Header buffer
int zsize
For 3D Data (or Color)
int kind
Kind of Graphics Format.
unsigned int bsize
Fllowing buf size or Any Data (byte unit)
uByte * grptr
Pointer to Data.
int ysize
Height of Graphics.
int depth
Color Depth of Graphics (bit unit)
int xsize
Width of Graphics.
int zs
zサイズ. 4Byte. 2Dの場合は 1.
sWord * gp
グラフィックデータへのポインタ. xs*ys*zs*2Byte.