34 int i, linebyte, databyte;
44 size_t ret = fread(&rhd, hd.
bsize, 1, fp);
79 if (databyte==linebyte) {
80 ret = fread(buf, hd.
lsize, 1, fp);
88 for (i=0; i<hd.
ysize; i++) {
89 ret = fread(buf, databyte, 1, fp);
90 if (ret>0) ret = fread(null, linebyte - databyte, 1, fp);
102 for(i=0; i<hd.
xsize*hd.
ysize; i++) wptr[i] = ntohs(wptr[i]);
124 int i, j, k, l, linebyte, databyte, depth, lsize;
125 uByte null=0x00, *ptr, *buf;
133 for (u=0; u<hd->
lsize; u++) ptr[u] = hd->
grptr[u];
139 if (obit==8) depth = 8;
143 buf = (
uByte*)malloc(lsize);
145 memset(buf, 0, lsize);
151 max =
Max(max, wp[i]);
154 buf[i] = 255*wp[i]/max;
160 buf[k++] = hd->
grptr[l++];
161 buf[k++] = hd->
grptr[l++];
172 databyte = hd->
xsize*depth/8;
173 linebyte = lsize/hd->
ysize;
176 lsize = linebyte*hd->
ysize;
188 ptr = (
uByte*)malloc(lsize);
190 if (hd->
depth==16) free(buf);
193 memset(ptr, 0, lsize);
196 for (i=0 ; i<hd->
ysize; i++) {
197 for (j=0; j<databyte; j++) ptr[k++] = buf[l++];
198 for (j=0; j<linebyte-databyte; j++) ptr[k++] = null;
201 if (hd->
depth==16) free(buf);
205 fwrite(&shd,
sizeof(
RasHead), 1, fp);
206 fwrite(ptr, lsize, 1, fp);
260 size_t ret = fread((
void*)hd.
buf, hd.
bsize, 1, fp);
268 if (hd.
zsize>=10 && cnt) {
278 if (hd.
grptr==NULL) {
286 fseek(fp, hd.
bsize, 0);
298 for (
int i=0; i<hd.
zsize; i++) {
299 ret = fread(hd.
grptr+i*psize, psize, 1, fp);
323 for (
int i=0; i<hd.
xsize*hd.
ysize*hd.
zsize; i++) wptr[i] = ntohs(wptr[i]);
327 if (counter!=NULL) counter->
PutFill();
356 memset(&hd, 0,
sizeof(
CmnHead));
364 if ((fp=fopen(fn,
"rb"))==NULL) {
400 ret = fread((
void*)&chd, hd.
bsize, 1, fp);
415 if (fsz>0 && fsz!=hd.
bsize+hd.
lsize)
return hd;
426 if (hd.
grptr==NULL) {
434 fseek(fp, hd.
bsize, 0);
443 for (i=0; i<hd.
xsize*hd.
ysize; i++) wptr[i] = ntohs(wptr[i]);
471int jbxl::dicomHeader(FILE* fp,
int fsize,
int* dsize,
int* xsize,
int* ysize,
int* depth,
double* rzxy)
473 int i, j, sz, rp, ef;
475 int xs = 0, ys = 0, dp = 0;
481 uWord cn[2] __attribute__((may_alias));
489 if (rzxy!=NULL) *rzxy = 0.0;
495 rp = (int)fread(&dt,
sizeof(
uWord), 1, fp);
496 while(!feof(fp) && ef!=
ON) {
499 rp += (int)fread(&dt,
sizeof(
uWord), 1, fp);
502 rp += (int)fread(&cn,
sizeof(
uWord), 2, fp);
505 rp += (int)fread(&cn,
sizeof(
uWord), 2, fp);
508 int* sizep = (
int*)cn;
510 hsize = rp*
sizeof(
uWord);
511 if (fsize>=*dsize+hsize) {
517 rp += (int)fread(&dt,
sizeof(
uWord), 1, fp);
522 sz = rp*
sizeof(
uWord);
523 wp = (
uWord*)malloc(sz);
530 size_t ret = fread(wp, sz, 1, fp);
535 for (i=0; i<sz/2-3; i++) {
544 memset(rx, 0,
LNAME);
545 memset(ry, 0,
LNAME);
548 else ln = *(
int*)&wp[i+2];
551 bp = (
uByte*)&wp[i+4];
553 while (j<ln-1 && bp[j]!=
'\\') {
560 while (j<ln-1 && bp[j]!=
' ') {
564 if (!strcmp(rx, ry)) {
573 else ln = *(
int*)&wp[i+2];
575 xs = (int)*(
sWord*)&wp[i+4];
578 xs = *(
int*)&wp[i+4];
585 else ln = *(
int*)&wp[i+2];
587 ys = (int)*(
sWord*)&wp[i+4];
590 ys = *(
int*)&wp[i+4];
597 else ln = *(
int*)&wp[i+2];
599 dp = (int)*(
sWord*)&wp[i+4];
602 dp = *(
int*)&wp[i+4];
609 if (rzxy!=NULL) *rzxy = rz;
610 if (xsize!=NULL) *xsize = xs;
611 if (ysize!=NULL) *ysize = ys;
612 if (depth!=NULL) *depth = dp;
471int jbxl::dicomHeader(FILE* fp,
int fsize,
int* dsize,
int* xsize,
int* ysize,
int* depth,
double* rzxy) {
…}
642 if ((fp=fopen(fn,
"r"))==NULL) {
657 int xsize, ysize, depth;
663 sz =
dicomHeader(fp, fsize, &dsize, &xsize, &ysize, &depth, &rzxy);
669 if (dsize!=xsize*ysize*((depth+7)/8)) {
674 if ((depth+7)/8!=2) {
679 vp.
set(xsize, ysize, 1, 0, 0, rzxy);
682 size_t ret = fread(vp.
gp, dsize, 1, fp);
714 memset(&hd, 0,
sizeof(
CmnHead));
734 if ((fp=fopen(fn,
"rb"))==NULL) {
745 size_t ret = fread(&hd.
entry, hsz, 1, fp);
770 if (fsz == (
int)(hsz + hd.
bsize + hd.
lsize) + 4 ) hsz = 36;
771 if (fsz == (
int)(hsz + hd.
bsize + hd.
lsize) + 16) hsz = 48;
773 if (fsz == (
int)(hsz + hd.
bsize + hd.
lsize)) {
787 ret = fread(hd.
buf, hd.
bsize, 1, fp);
801 PRINT_MESG(
"JBXL::readXHead: ファイルサイズ fsz = %d\n", fsz);
811 memset(&hd, 0,
sizeof(
CmnHead));
819 ret = fread(&cthd, csz, 1, fp);
844 memcpy(hd.
buf, &cthd, csz);
849 PRINT_MESG(
"JBXL::readXHead: ファイルサイズ fsz = %d\n", fsz);
858 memset(&hd, 0,
sizeof(
CmnHead));
863 int ls, sz, dsize, xsize, ysize, depth;
866 sz =
dicomHeader(fp, fsz, &dsize, &xsize, &ysize, &depth, &rzxy);
867 ls = xsize*ysize*((depth+7)/8);
868 if (sz>0 && dsize==ls) {
880 memset(pcthd, 0, hd.
bsize);
921 if (isJPEGHeader(buf)) {
936 memset(&hd, 0,
sizeof(
CmnHead));
979 bool no_ntoh =
false;
983 memset(&hd, 0,
sizeof(
CmnHead));
992 if ((fp=fopen(fn,
"rb"))==NULL) {
1015 if (hd.
depth==16 && !no_ntoh) {
1018 wptr[i] = ntohs(wptr[i]);
1033 size_t ret = fread(&hd.
entry, hsz, 1, fp);
1055 if (fsz == (
int)(hsz + hd.
bsize + hd.
lsize) + 4 ) hsz = 36;
1056 if (fsz == (
int)(hsz + hd.
bsize + hd.
lsize) + 16) hsz = 48;
1058 if (fsz == (
int)(hsz + hd.
bsize + hd.
lsize)) {
1063 if (hd.
zsize >= 10 && cnt) {
1065 if (counter != NULL) {
1087 size_t ret = fread(hd.
buf, hd.
bsize, 1, fp);
1100 if (counter!=NULL) counter->
PutFill();
1106 if (counter==NULL) {
1107 size_t ret = fread(hd.
grptr, hd.
lsize, 1, fp);
1117 for (
int i=0; i<hd.
zsize; i++) {
1118 size_t ret = fread(hd.
grptr+i*psize, psize, 1, fp);
1140 if (hd.
depth==16 && !no_ntoh) {
1143 wptr[i] = ntohs(wptr[i]);
1147 if (counter!=NULL) counter->
PutFill();
1151 memset(&hd, 0,
sizeof(
CmnHead));
1162 memset(&hd, 0,
sizeof(
CmnHead));
1181 memset(pcthd, 0, hd.
bsize);
1200 wptr[i] = ntohs(wptr[i]);
1241#ifdef ENABLE_JPEGLIB
1243 if (isJPEGHeader(buf)) {
1245 JPEGImage jpg = readJPEGData(fp);
1246 hd = JPEGImage2CmnHead(jpg);
1262 memset(&hd, 0,
sizeof(
CmnHead));
1265 if (hd.
grptr==NULL) {
1271 memset(hd.
grptr, 0, fsz);
1274 ret = fread(hd.
grptr, fsz, 1, fp);
1318 bool no_ntoh =
false;
1322 memset(&hd, 0,
sizeof(
CmnHead));
1326 if (chd==NULL)
return hd;
1334 if ((fp=fopen(fn,
"rb"))==NULL) {
1343 kind = chd->
kind & 0x00ff;
1354 if (hd.
depth==16 && !no_ntoh) {
1357 wptr[i] = ntohs(wptr[i]);
1379 memset(pcthd, 0, hd.
bsize);
1398 wptr[i] = ntohs(wptr[i]);
1416#ifdef ENABLE_JPEGLIB
1420 JPEGImage jpg = readJPEGData(fp);
1421 hd = JPEGImage2CmnHead(jpg);
1438 size_t ret = fread(&hd.
entry, hsz, 1, fp);
1450 if (fsz == (
int)(hsz + hd.
bsize + hd.
lsize) + 4 ) hsz = 36;
1451 if (fsz == (
int)(hsz + hd.
bsize + hd.
lsize) + 16) hsz = 48;
1454 if (hd.
zsize>=10 && cnt) {
1456 if (counter!=NULL) {
1479 ret = fread(hd.
buf, hd.
bsize, 1, fp);
1491 if (counter!=NULL) counter->
PutFill();
1495 if (counter==NULL) {
1506 for (
int i=0; i<hd.
zsize; i++) {
1507 ret = fread(hd.
grptr+i*psize, psize, 1, fp);
1529 if (hd.
depth==16 && !no_ntoh) {
1532 wptr[i] = ntohs(wptr[i]);
1536 if (counter!=NULL) counter->
PutFill();
1541 PRINT_MESG(
"JBXL::readCmnHeadFile: 未知のデータ形式が指定された.(%04x, %04x)\n", chd->
kind, (
uWord)kind);
1581 int kind = hd->
kind & 0x0ff;
1586 if ((fp=fopen(fn,
"wb"))==NULL) {
1587 PRINT_MESG(
"JBXL::writeCmnHeadFile: ERROR:ファイルオープン失敗\n");
1595 if (csize<0)
return (
int)csize;
1614 PRINT_MESG(
"JBXL::writeCmnHeadFile: ERROR:書き込みファイルのサイズが合わない %d != %d\n", psize, fsz);
1619 if ((fp=fopen(fn,
"rb"))==NULL) {
1620 PRINT_MESG(
"JBXL::writeCmnHeadFile: ERROR:ファイル検査:再オープン失敗\n");
1628 PRINT_MESG(
"JBXL::writeCmnHeadFile: ERROR:ファイルヘッダ検査:ヘッダ異常\n");
1633 PRINT_MESG(
"JBXL::writeCmnHeadFile: ERROR:ファイルヘッダ検査:ヘッダ異常\n");
1674 int kind = hd->
kind & 0x00ff;
1685#ifdef ENABLE_JPEGLIB
1689 JPEGImage jpg = CmnHead2JPEGImage(*hd);
1690 csize = writeJPEGData(fp, &jpg, 100);
1719 memset(ptr, 0, hd->
lsize);
1724 PRINT_MESG(
"JBXL::writeCmnHeadData: CTデータ\n");
1725 PRINT_MESG(
"JBXL::writeCmnHeadData: ヘッダバッファ bsize = %d\n", hd->
bsize);
1748 for (j=0; j<hd->
depth/8; j++) ptr[k++] = 0x00;
1749 for (j=hd->
depth/8; j<2; j++) ptr[k++] = hd->
grptr[l++];
1752 else if (hd->
depth==16) {
1754 for (j=0; j<2; j++) ptr[k++] = hd->
grptr[l++];
1759 for (j=0; j<2; j++) ptr[k++] = hd->
grptr[l++];
1760 l += (hd->
depth)/8 - 2;
1765 PRINT_MESG(
"JBXL::writeCmnHeadData: サポートしていないヘッダタイプ %d\n", hd->
kind);
1776 if (hd->
zsize>=10 && cnt) {
1778 if (counter!=NULL) {
1789 fwrite(&cmd.
entry, csize, 1, fp);
1793 fwrite(&chd,
sizeof(
CTHead), 1, fp);
1799 if (counter==NULL) {
1800 fwrite(ptr, hd->
lsize, 1, fp);
1804 for (i=0; i<hd->
zsize; i++) {
1805 fseek(fp, csize, 0);
1806 fwrite(ptr+i*psize, psize, 1, fp);
1819 if (counter!=NULL) counter->
PutFill();
void free_Buffer(Buffer *buf)
Buffer型変数のバッファ部を解放する
Buffer read_Buffer_data(FILE *fp, int sz)
ファイルポインタ fp から szバイトをBuffer型変数に読み込む.
virtual void StepIt(int n=1)
カウンタのメモリを増やす
virtual void SetMax(int m)
カウンタの最大値(最終目標)を設定
virtual void PutFill()
取り敢えずの目標(最短目標)までカウンタを進める.
virtual bool isCanceled()
カウンタがオペレータにより,キャンセルされたか
virtual void SetPos(int p)
カウンタの現在位置を設定
int zs
zサイズ. 4Byte. 2Dの場合は 1.
double RZxy
Z軸の歪.Z軸の間隔を 1とした XY軸の間隔.(X or Y)/Z.
void set(RBound< int > rb, T v=(T) 0, T b=(T) 0, double rz=1.0)
unsigned short uWord
2Byte
#define checkBit(dat, bit)
#define JBXL_GRAPH_IVDARG_ERROR
無効な引数
#define JBXL_FILE_READ_ERROR
ファイル読み込みエラー
#define JBXL_GRAPH_OPFILE_ERROR
ファイルのオープンエラー
#define JBXL_GRAPH_RDFILE_ERROR
ファイルの読み込みエラー
#define JBXL_GRAPH_CANCEL
処理がキャンセルされた
#define JBXL_GRAPH_NOFILE_ERROR
ファイルが存在しない
#define JBXL_GRAPH_WRFILE_ERROR
ファイルの書き込みエラー
#define JBXL_GRAPH_HEADER_ERROR
画像ヘッダーのエラー
#define JBXL_GRAPH_MEMORY_ERROR
メモリエラー
CVCounter * GetUsableGlobalCounter()
現在有効なグローバルカウンタを得る.(子カウンタを得るかもしれない)
MSGraph< sWord > readDicomFile(const char *fn)
int writeCmnHeadData(FILE *fp, CmnHead *hd, bool cnt=false)
MSGraph< sWord > readDicomData(FILE *fp, int fsz)
void init_CmnHead(CmnHead *hd)
void free_CmnHead(CmnHead *hd)
CmnHead readRasData(FILE *fp)
read_ras_data() for C // SUN RASTER形式のファイルを読み込む
int writeRasData(FILE *fp, CmnHead *ch, int obit=8)
write_ras_data() for C
CmnHead readMoonData(FILE *fp, unsigned int fsz=0, bool no_ntoh=false)
CmnHead readUserSetData(FILE *fp, CmnHead *ch, bool cnt=false)
read_user_data() for C // ユーザ指定(ch)のデータ形式でファイルを読み込む
CmnHead readMoonFile(const char *fn, bool no_ntoh=false)
CmnHead readCmnHeadFile(const char *fn, CmnHead *ch, bool cnt=false)
拡張read関数.ファイル種別を指定して読み込む.
CmnHead readXHeadFile(const char *fn, CmnHead *ch=NULL, bool cnt=false)
拡張read関数.ファイルを自動判別して読み込む.
int writeCmnHeadFile(const char *fn, CmnHead *hd, bool cnt=false)
int dicomHeader(FILE *fp, int fsize, int *dsize, int *xsize, int *ysize, int *depth, double *rzxy)
CmnHead readXHead(const char *fn, CmnHead *ch=NULL)
ヘッダ部分のみ読み込み
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.