Doxygen Source Code Documentation
mri_write.c File Reference
#include "mrilib.h"#include <signal.h>Go to the source code of this file.
Defines | |
| #define | HEADER (28*256) |
Functions | |
| int | mri_write (char *fname, MRI_IMAGE *im) |
| int | mri_write_7D (char *fname, MRI_IMAGE *im) |
| int | mri_write_pnm (char *fname, MRI_IMAGE *im) |
| int | mri_write_1D (char *fname, MRI_IMAGE *im) |
| int | mri_write_ascii (char *fname, MRI_IMAGE *im) |
| int | mri_write_raw (char *fname, MRI_IMAGE *im) |
| int | mri_write_jpg (char *fname, MRI_IMAGE *im) |
Define Documentation
|
|
|
Function Documentation
|
||||||||||||
|
Definition at line 15 of file mri_write.c. References ENTRY, free, MRI_IMAGE::kind, malloc, mri_data_pointer(), MRI_IS_2D, mri_write_7D(), mri_write_pnm(), MRI_IMAGE::nx, MRI_IMAGE::ny, MRI_IMAGE::pixel_size, and RETURN. Referenced by AB_interp(), get_line_opt(), ISQ_saver_CB(), main(), SFIM_write_avs(), and write_images().
00016 {
00017 FILE *imfile ;
00018 void *data ;
00019 int dsize , noheader = FALSE ;
00020
00021 ENTRY("mri_write") ;
00022
00023 /* bad inputs? */
00024
00025 if( im == NULL || fname == NULL || *fname == '\0' ) RETURN(0) ;
00026
00027 /* special cases */
00028
00029 if( ! MRI_IS_2D(im) ){ RETURN(mri_write_7D ( fname , im )) ; }
00030 if( im->kind == MRI_rgb ){ RETURN(mri_write_pnm( fname , im )) ; }
00031 if( im->kind == MRI_byte ){ RETURN(mri_write_pnm( fname , im )) ; }
00032
00033 /* open the file for output */
00034
00035 if( strcmp(fname,"-") != 0 ){
00036 imfile = fopen( fname , "r" ) ;
00037 if( imfile != NULL ){
00038 fclose( imfile ) ;
00039 fprintf(stderr,"(FAILED) attempt to overwrite file %s\n",fname) ;
00040 RETURN(0) ;
00041 }
00042 }
00043
00044 if( strcmp(fname,"-") != 0 )
00045 imfile = fopen( fname , "w" ) ;
00046 else
00047 imfile = stdout ; /* 18 Apr 2005: write to stdout instead */
00048
00049 if( imfile == NULL ){
00050 fprintf( stderr , "couldn't open for output file %s\n" , fname ) ;
00051 RETURN(0) ;
00052 }
00053
00054 /*** possibly write MRI header, unless a standard image type ***/
00055
00056 dsize = im->pixel_size * im->nx * im->ny ;
00057
00058 if( im->kind == MRI_short ){
00059 switch( dsize ){
00060 default: noheader = FALSE ; break ;
00061
00062 case 8192: /* raw 64x64 short */
00063 case 32768: /* raw 128x128 short */
00064 case 131072: /* raw 256x256 short */
00065 case 524288: /* raw 512x512 short -- RWC 3/21/95 */
00066 case 2097152: /* raw 1024x1024 short -- RWC 3/21/95 */
00067 noheader = TRUE ;
00068 break ;
00069 }
00070 } else if( im->kind == MRI_byte ){
00071 switch( dsize ){
00072 default: noheader = FALSE ; break ;
00073
00074 case 4096: /* raw 64x64 byte -- RWC 3/21/95 */
00075 case 16384: /* raw 128x128 byte -- RWC 3/21/95 */
00076 case 65536: /* raw 256x256 8-bit -- Matthew Belmonte March 1995 */
00077 case 262144: /* raw 512x512 byte -- RWC 3/21/95 */
00078 case 1048576: /* raw 1024x1024 byte -- RWC 3/21/95 */
00079 noheader = TRUE ;
00080 break ;
00081 }
00082 }
00083
00084 if( !noheader ) fprintf( imfile , "MRI %d %d %d\n" ,
00085 im->kind , im->nx , im->ny ) ;
00086
00087 /*** special case: add Signa 4.x header (of all zeros) ***/
00088
00089 if( noheader && dsize == 131072 && im->kind == MRI_short ){
00090 #define HEADER (28*256)
00091 int ii ;
00092 short * qq ;
00093 qq = (short *) malloc(sizeof(short)*HEADER) ; /* header 256 x 256 */
00094 for( ii=0 ; ii < HEADER ; ii++ ) qq[ii] = 0 ;
00095 fwrite( qq , sizeof(short) , HEADER , imfile ) ;
00096 free(qq) ;
00097 }
00098
00099 /*** write rest of data now ***/
00100
00101 data = mri_data_pointer( im ) ;
00102 fwrite( data , im->pixel_size , im->nx * im->ny , imfile ) ;
00103
00104 if( imfile != stdout ) fclose( imfile ) ;
00105 RETURN(1) ;
00106 }
|
|
||||||||||||
|
Definition at line 239 of file mri_write.c. References ENTRY, fim, mri_free(), mri_transpose(), mri_write_ascii(), MRI_IMAGE::nz, and RETURN. Referenced by GRA_handle_keypress(), GRA_refwrite_choose_CB(), main(), MASKAVE_main(), and process_1ddata().
00240 {
00241 MRI_IMAGE *fim ;
00242 int jj ;
00243
00244 ENTRY("mri_write_1D") ;
00245
00246 if( fname == NULL || strlen(fname) == 0 ||
00247 im == NULL || im->nz > 1 ) RETURN( 0 );
00248
00249 fim = mri_transpose( im ) ;
00250 jj = mri_write_ascii( fname , fim ) ;
00251 mri_free(fim) ;
00252 RETURN( jj );
00253 }
|
|
||||||||||||
|
Definition at line 110 of file mri_write.c. References ENTRY, MRI_IMAGE::kind, mri_data_pointer(), MRI_DIMENSIONALITY, MRI_IMAGE::nt, MRI_IMAGE::nu, MRI_IMAGE::nv, MRI_IMAGE::nvox, MRI_IMAGE::nw, MRI_IMAGE::nx, MRI_IMAGE::ny, MRI_IMAGE::nz, MRI_IMAGE::pixel_size, and RETURN. Referenced by mri_write().
00111 {
00112 FILE *imfile ;
00113 void *data ;
00114
00115 ENTRY("mri_write_7D") ;
00116
00117 if( im == NULL ) RETURN( 0 );
00118
00119 imfile = fopen( fname , "r" ) ;
00120 if( imfile != NULL ){
00121 fclose( imfile ) ;
00122 fprintf(stderr,"(FAILED) attempt to overwrite file %s\n",fname) ;
00123 RETURN( 0 );
00124 }
00125
00126 imfile = fopen( fname , "w" ) ;
00127
00128 if( imfile == NULL ){
00129 fprintf( stderr , "couldn't open for output file %s\n" , fname ) ;
00130 RETURN( 0 );
00131 }
00132
00133 /*** write MR7 header ***/
00134
00135 switch( MRI_DIMENSIONALITY(im) ){
00136 default:
00137 case 1:
00138 fprintf( imfile , "MR1 %d %d\n" ,
00139 im->kind , im->nx ) ;
00140 break ;
00141
00142 case 2:
00143 fprintf( imfile , "MR2 %d %d %d\n" ,
00144 im->kind , im->nx,im->ny ) ;
00145 break ;
00146
00147 case 3:
00148 fprintf( imfile , "MR2 %d %d %d %d\n" ,
00149 im->kind , im->nx,im->ny,im->nz ) ;
00150 break ;
00151
00152 case 4:
00153 fprintf( imfile , "MR2 %d %d %d %d %d\n" ,
00154 im->kind , im->nx,im->ny,im->nz,im->nt ) ;
00155 break ;
00156
00157 case 5:
00158 fprintf( imfile , "MR2 %d %d %d %d %d %d\n" ,
00159 im->kind , im->nx,im->ny,im->nz,im->nt,im->nu ) ;
00160 break ;
00161
00162 case 6:
00163 fprintf( imfile , "MR2 %d %d %d %d %d %d %d\n" ,
00164 im->kind , im->nx,im->ny,im->nz,im->nt,im->nu,im->nv ) ;
00165 break ;
00166
00167 case 7:
00168 fprintf( imfile , "MR2 %d %d %d %d %d %d %d %d\n" ,
00169 im->kind , im->nx,im->ny,im->nz,im->nt,im->nu,im->nv,im->nw ) ;
00170 break ;
00171 }
00172
00173 /*** write rest of data now ***/
00174
00175 data = mri_data_pointer( im ) ;
00176 fwrite( data , im->pixel_size , im->nvox , imfile ) ;
00177 fclose( imfile ) ;
00178
00179 RETURN( 1 );
00180 }
|
|
||||||||||||
|
------------------------ Only good for 1D and 2D images ---------------------------* Definition at line 257 of file mri_write.c. References ENTRY, i, MRI_IMAGE::kind, MRI_BYTE_PTR, MRI_COMPLEX_PTR, MRI_DOUBLE_PTR, MRI_FLOAT_PTR, MRI_INT_PTR, MRI_RGB_PTR, MRI_SHORT_PTR, MRI_IMAGE::nx, MRI_IMAGE::ny, MRI_IMAGE::nz, r, and RETURN. Referenced by GRA_refwrite_choose_CB(), main(), and mri_write_1D().
00258 {
00259 int ii , jj , nx , ny ;
00260 FILE *imfile ;
00261
00262 ENTRY("mri_write_ascii") ;
00263
00264 if( fname == NULL || strlen(fname) == 0 ||
00265 im == NULL || im->nz > 1 ) RETURN( 0 );
00266
00267 if( strcmp(fname,"-") == 0 ){
00268 imfile = stdout ;
00269 } else {
00270 imfile = fopen( fname , "r" ) ;
00271 if( imfile != NULL ){
00272 fclose( imfile ) ;
00273 fprintf(stderr,"(FAILED) attempt to overwrite file %s\n",fname) ;
00274 RETURN( 0 );
00275 }
00276 imfile = fopen( fname , "w" ) ;
00277 if( imfile == NULL ){
00278 fprintf( stderr , "couldn't open for output file %s\n" , fname ) ;
00279 RETURN( 0 );
00280 }
00281 }
00282
00283 nx = im->nx ; ny = im->ny ;
00284
00285 for( jj=0 ; jj < ny ; jj++ ){
00286
00287 switch( im->kind ){
00288
00289 case MRI_float:{
00290 float *iar = MRI_FLOAT_PTR(im) + (jj*nx) ;
00291 for( ii=0 ; ii < nx ; ii++ )
00292 fprintf(imfile," %14.7g",iar[ii]) ;
00293 }
00294 break ;
00295
00296 case MRI_short:{
00297 short *iar = MRI_SHORT_PTR(im) + (jj*nx) ;
00298 for( ii=0 ; ii < nx ; ii++ )
00299 fprintf(imfile," %6d",iar[ii]) ;
00300 }
00301 break ;
00302
00303 case MRI_byte:{
00304 byte *iar = MRI_BYTE_PTR(im) + (jj*nx) ;
00305 for( ii=0 ; ii < nx ; ii++ )
00306 fprintf(imfile," %3d",iar[ii]) ;
00307 }
00308 break ;
00309
00310 case MRI_int:{
00311 int *iar = MRI_INT_PTR(im) + (jj*nx) ;
00312 for( ii=0 ; ii < nx ; ii++ )
00313 fprintf(imfile," %6d",iar[ii]) ;
00314 }
00315 break ;
00316
00317 case MRI_double:{
00318 double *iar = MRI_DOUBLE_PTR(im) + (jj*nx) ;
00319 for( ii=0 ; ii < nx ; ii++ )
00320 fprintf(imfile," %14.7g",iar[ii]) ;
00321 }
00322 break ;
00323
00324 case MRI_complex:{
00325 complex *iar = MRI_COMPLEX_PTR(im) + (jj*nx) ;
00326 for( ii=0 ; ii < nx ; ii++ )
00327 fprintf(imfile," %14.7g %14.7g",iar[ii].r,iar[ii].i) ;
00328 }
00329 break ;
00330
00331 case MRI_rgb:{
00332 byte *iar = MRI_RGB_PTR(im) + (3*jj*nx) ;
00333 for( ii=0 ; ii < nx ; ii++ )
00334 fprintf(imfile," %3d %3d %3d",iar[3*ii],iar[3*ii+1],iar[3*ii+2]) ;
00335 }
00336 break ;
00337 }
00338
00339 fprintf(imfile,"\n") ;
00340 }
00341
00342 if( imfile != stdout ) fclose(imfile) ;
00343 RETURN( 1 );
00344 }
|
|
||||||||||||
|
Definition at line 380 of file mri_write.c. References free, MRI_IMAGE::kind, malloc, MRI_BYTE_PTR, MRI_RGB_PTR, MRI_IMAGE::nvox, MRI_IMAGE::nx, MRI_IMAGE::ny, pclose, popen, and THD_find_executable(). Referenced by mri_write_pnm().
00381 {
00382 char *pg , *jpfilt ;
00383 FILE *fp ;
00384
00385 if( fname == NULL || *fname == '\0' || im == NULL ) return 0 ;
00386 if( im->kind != MRI_rgb && im->kind != MRI_byte ) return 0 ;
00387
00388 pg = THD_find_executable( "cjpeg" ) ;
00389 if( pg == NULL ) return 0 ;
00390
00391 jpfilt = (char *)malloc( sizeof(char)*(strlen(pg)+strlen(fname)+32) ) ;
00392 sprintf( jpfilt , "%s -quality 95 > %s" , pg , fname ) ;
00393 #ifndef CYGWIN
00394 signal( SIGPIPE , SIG_IGN ) ;
00395 #endif
00396 fp = popen( jpfilt , "w" ) ;
00397 if( fp == NULL ){ free((void *)jpfilt); return 0 ;}
00398
00399 if( im->kind == MRI_rgb ){
00400 fprintf(fp,"P6\n%d %d\n255\n" , im->nx,im->ny ) ;
00401 fwrite( MRI_RGB_PTR(im), sizeof(byte), 3*im->nvox, fp ) ;
00402 } else if( im->kind == MRI_byte ){
00403 fprintf(fp,"P5\n%d %d\n255\n" , im->nx,im->ny ) ;
00404 fwrite( MRI_BYTE_PTR(im), sizeof(byte), im->nvox, fp ) ;
00405 }
00406 (void) pclose(fp) ;
00407 free((void *)jpfilt) ; return 1 ;
00408 }
|
|
||||||||||||
|
Definition at line 184 of file mri_write.c. References ENTRY, MRI_IMAGE::kind, MRI_BYTE_PTR, MRI_RGB_PTR, mri_write_jpg(), MRI_IMAGE::nvox, MRI_IMAGE::nx, MRI_IMAGE::ny, MRI_IMAGE::nz, RETURN, and STRING_HAS_SUFFIX. Referenced by AFNI_finalize_saveim_CB(), GRA_file_pixmap(), ISQ_saver_CB(), ISQ_snapfile(), main(), mri_write(), RCREND_finalize_saveim_CB(), and REND_finalize_saveim_CB().
00185 {
00186 FILE *imfile ;
00187 void *data ;
00188 int dsize , noheader = FALSE ;
00189
00190 ENTRY("mri_write_pnm") ;
00191
00192 if( im == NULL ) RETURN( 0 );
00193 if( im->nz > 1 ) RETURN( 0 );
00194 if( im->kind != MRI_byte && im->kind != MRI_rgb ) RETURN( 0 );
00195
00196 if( STRING_HAS_SUFFIX(fname,".jpg") ){ /* 15 Apr 2005 */
00197 RETURN( mri_write_jpg(fname,im) ) ;
00198 }
00199
00200 if( strcmp(fname,"-") != 0 ){
00201 imfile = fopen( fname , "r" ) ;
00202 if( imfile != NULL ){
00203 fclose( imfile ) ;
00204 fprintf(stderr,"(FAILED) attempt to overwrite file %s\n",fname) ;
00205 RETURN( 0 );
00206 }
00207 }
00208
00209 if( strcmp(fname,"-") != 0 )
00210 imfile = fopen( fname , "w" ) ;
00211 else
00212 imfile = stdout ; /* 18 Apr 2005: write to stdout */
00213
00214 if( imfile == NULL ){
00215 fprintf( stderr , "couldn't open for output file %s\n" , fname ) ;
00216 RETURN( 0 );
00217 }
00218
00219 switch( im->kind ){
00220
00221 case MRI_byte:
00222 fprintf( imfile , "P5\n%d %d\n255\n" , im->nx,im->ny ) ; /* header */
00223 fwrite( MRI_BYTE_PTR(im), sizeof(byte), im->nvox, imfile ) ; /* bytes */
00224 break ;
00225
00226 case MRI_rgb:
00227 fprintf( imfile , "P6\n%d %d\n255\n" , im->nx,im->ny ) ; /* header */
00228 fwrite( MRI_RGB_PTR(im), sizeof(byte), 3*im->nvox, imfile ) ; /* bytes */
00229 break ;
00230
00231 }
00232
00233 if( imfile != stdout ) fclose( imfile ) ;
00234 RETURN( 1 );
00235 }
|
|
||||||||||||
|
Definition at line 350 of file mri_write.c. References ENTRY, mri_data_pointer(), MRI_IMAGE::nvox, MRI_IMAGE::pixel_size, and RETURN. Referenced by main().
00351 {
00352 FILE *imfile ;
00353 void *data ;
00354 int dsize ;
00355
00356 ENTRY("mri_write_raw") ;
00357
00358 if( im == NULL || fname == NULL || fname[0] == '\0' ) RETURN( 0 );
00359
00360 dsize = im->pixel_size * im->nvox ;
00361 data = mri_data_pointer( im ) ;
00362
00363 if( dsize <= 0 || data == NULL ) RETURN( 0 );
00364
00365 imfile = fopen( fname , "w" ) ;
00366
00367 if( imfile == NULL ){
00368 fprintf(stderr,"** Can't open for output: %s\n",fname) ; RETURN( 0 );
00369 }
00370
00371 fwrite( data , 1 , dsize , imfile ) ;
00372 fclose( imfile ) ;
00373 RETURN( 1 );
00374 }
|