1
/*************************
2
* libdicom by Tony Voet *
3
*************************/
5
* $Id: image.c,v 1.2 2003/09/03 21:51:43 enlf Exp $
11
/* eNlf: BEGIN - comment out unwanted stuff */
15
/* eNlf: END - comment out unwanted stuff */
21
IMAGE *dicom_new(int rgb,U16 frames,U16 w,U16 h)
25
dicom_log(DEBUG,"dicom_new()");
27
image=malloc(sizeof(IMAGE));
30
dicom_log(ERROR,"Out of memory");
40
image->data.rgb=malloc((unsigned)(frames*w*h)*3U);
42
image->data.gray=malloc((unsigned)(frames*w*h)*2U);
46
dicom_log(ERROR,"Out of memory");
59
int dicom_read(const char *file,IMAGE **image,int *images,int parametric)
64
dicom_log(DEBUG,"dicom_read()");
68
dicom_log(ERROR,"No file given");
72
if (!image || !images)
74
dicom_log(ERROR,"Argument missing");
81
for (*image=0L,*images=0;;)
83
single=dicom_single();
87
new=dicom_transform(single,parametric);
91
tmp=realloc(*image,(*images+1)*sizeof(IMAGE));
93
tmp=malloc(sizeof(IMAGE));
97
dicom_log(ERROR,"Error reallocating memory");
98
eNlfSafeFree(new->data.rgb);
103
memcpy(*image+*images,new,sizeof(IMAGE));
113
dicom_log(ERROR,"No images found");
114
/* eNlf: BEGIN -- changes for integration in MedCon */
116
/* eNlf: END -- changes for integration in MedCon */
127
void dicom_free(IMAGE *image,int images)
131
dicom_log(DEBUG,"dicom_free()");
136
for (i=0; i<images; i++)
137
eNlfSafeFree(image[i].data.rgb);
146
int dicom_write(const char *file,const IMAGE *image)
148
dicom_log(DEBUG,"dicom_write()");
152
dicom_log(ERROR,"No file given");
158
dicom_log(ERROR,"No image given");
162
dicom_log(EMERGENCY,"DICOM write is not implemented yet");
166
/* eNlf: BEGIN - comment out unwanted stuff */
171
int dicom_write_ascii(const char *file,const IMAGE *image,int width)
174
"$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,\"^`'. ";
178
U16 frame,x,y,*pixel;
180
dicom_log(DEBUG,"dicom_write_ascii()");
184
dicom_log(ERROR,"No image given");
192
stream=fopen(file,"wb");
195
dicom_log(ERROR,"Unable to create ascii file");
200
zoom=dicom_zoom(image,width,width*image->h/(image->w<<1),-1);
207
pixel=zoom->data.gray;
209
for (frame=zoom->frames; frame; frame--)
211
for (y=zoom->h; y; y--)
213
for (x=zoom->w; x; x--,pixel++)
214
putc(gray[(int) 69**pixel/0xFFFF],stream);
230
int dicom_write_jpeg(const char *file,const IMAGE *image,int quality)
232
struct jpeg_compress_struct cinfo;
233
struct jpeg_error_mgr jerr;
234
JSAMPROW line,target;
238
dicom_log(DEBUG,"dicom_write_jpeg()");
242
dicom_log(ERROR,"No file given");
248
dicom_log(ERROR,"No image given");
254
line=malloc(image->w*2);
257
dicom_log(ERROR,"Out of memory");
262
stream=fopen(file,"wb");
265
dicom_log(ERROR,"Unable to create jpeg file");
269
cinfo.err=jpeg_std_error(&jerr);
270
jpeg_create_compress(&cinfo);
271
jpeg_stdio_dest(&cinfo,stream);
273
cinfo.image_width=image->w;
274
cinfo.image_height=image->h*image->frames;
278
cinfo.input_components=3;
279
cinfo.in_color_space=JCS_RGB;
283
cinfo.input_components=1;
284
cinfo.in_color_space=JCS_GRAYSCALE;
287
jpeg_set_defaults(&cinfo);
288
jpeg_set_quality(&cinfo,quality,-1);
289
jpeg_start_compress(&cinfo,-1);
291
while (cinfo.next_scanline<cinfo.image_height)
294
line=image->data.rgb+cinfo.next_scanline*image->w*3;
297
source=image->data.gray+cinfo.next_scanline*image->w;
300
for (l=image->w; l; l--)
301
*target++=*source++>>8;
304
jpeg_write_scanlines(&cinfo,&line,1);
310
jpeg_finish_compress(&cinfo);
312
jpeg_destroy_compress(&cinfo);
321
int dicom_write_eps(const char *file,const IMAGE *image)
323
dicom_log(DEBUG,"dicom_write_eps()");
327
dicom_log(ERROR,"No file given");
333
dicom_log(ERROR,"No image given");
337
dicom_log(EMERGENCY,"DICOM write EPS is not implemented yet");
342
/*eNlf: END - comment out unwanted stuff */