X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=common%2FclitkXdrImageIOWriter.cxx;h=9533c69edb449e77563dcc06b93c1fd0ae914b13;hb=163fa80ef3873595f3e3cf75fb03e53536d1a6ee;hp=6a5f3987d12c6f0b7d9ba4cb7fddd1e2b12cb110;hpb=674b3a310ef00ce63d7816552022cc06fbd41781;p=clitk.git diff --git a/common/clitkXdrImageIOWriter.cxx b/common/clitkXdrImageIOWriter.cxx index 6a5f398..9533c69 100755 --- a/common/clitkXdrImageIOWriter.cxx +++ b/common/clitkXdrImageIOWriter.cxx @@ -1,3 +1,20 @@ +/*========================================================================= + Program: vv http://www.creatis.insa-lyon.fr/rio/vv + + Authors belong to: + - University of LYON http://www.universite-lyon.fr/ + - Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr + - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the copyright notices for more information. + + It is distributed under dual licence + + - BSD See included LICENSE.txt file + - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html +======================================================================-====*/ /** * @file clitkXdrImageIO.cxx * @author Simon Rit @@ -66,250 +83,8 @@ void clitk::XdrImageIO::Write(const void* buffer) WriteImage( m_FileName.c_str(), s, s, 0, -1, 0, 2, 0, 0, 0, 0, buffer); } -/************************************************************************/ -/* */ -/* file : AVS_WXDR.C */ -/* */ -/* purpose : AVS module for writing XDR and RAW files */ -/* */ -/* author : Lambert Zijp (based on a true story by */ -/* Marcel van Herk) */ -/* */ -/* date : 19970716 */ -/* */ -/* portability: AVS requires sizeof(void *)==sizeof(int) */ -/* This module assumes sizeof(int)>=4 */ -/* */ -/* notes : This module has been integrated in QUIRT */ -/* */ -/************************************************************************/ -/* Updates: -When Who What -19980212 ljz Creation (i.e. Removed from 'mbfield4.c') -19980304 ljz Added QUIRT_NEXT_PARAMETER_FILE -19980310 ljz Fix: XDRs were written in text-mode when - quirt_init() is not called -19980319 ljz Undone last change: _fmode is set in DllEntryPoint -19980408 tp Moved M$-specific includes; - removed AVS portability anyway -19980611 mvh Added offset to write_raw (write into file) -20000214 lsp Check file handle returned by open before use -20000313 nd Two AVSerror messages added. -20000322 lsp Matched compute func declaration with desc func -20000630 ljz Added WRITE_RAW_LE, to write little-endian pixel-data -20000806 lsp Compute func now 'int', conformal to ANSI C++ -20000821 ljz Added NkiCompression parameter to WRITE_XDR. If used, - mode 2 is recommended. -20000504 mvh Added write coordinates in header option to WRITE_XDR -20010720 mvh Added option to write to stdout: pass "" as filename -20010723 mvh Made it working by redefining write; setmode does not work -20010725 bb Changed include order of windows.h and mbavs2q.h - for MS6 compiler. -20020124 mvh+kg The datatype in the header is now e.g. "xdr_integer" - The datatypes as "integer" were intended as having native - byte order, while we wrote bigendian (high byte first). Our - older files read therefore OK on HP and SUN but not on linux. -20020124 mvh+kg On AVS5 xdr_byte is illegal. Replace only that one by 'byte' -20030311 bb Added check on write errors. Disc full errors during a - write have nasty side-effects for other programs' open files. - Added check on file handle to prevent closing of stdout. -20030430 mvh Added append mode for WRITE_XDR -20030717 ljz Added support for NkiCompressionModes 3 and 4 (4 is recommended) -20040426 mvh ELEKTA NKI-XVI0.1 RELEASE -20040910 mvh Write uncompressed and warn if the compress malloc fails, layout -20040920 mvh Fixed the above option (failed in append mode) -20040924 mvh Fixed warn in option -20041117 mvh ELEKTA NKI-XVI0.1g RELEASE -20050302 ljz Merant tracker ID #1867: Check on bad compression-ratio causing - access violation. -20050308 ljz+mvh ELEKTA NKI-XVI0.1j RELEASE -20050411 mvh Fails on I178_s1_4H.3d mode 1: compression fails and written file corrupted -20060903 mvh Added WRITE_MEM_XDR and QUERY_MEM_XDR -20070330 mvh WRITE_XDR failed on G:\20605104_hypo lung\20605104_incl corr+doseab3.PACK -20071015 mvh ELEKTA NKI-XVI3.08 RELEASE -20080411 lsp+mw NULL->0 in WriteImage() ; __sun__ doesn't know -20080825 mgw Corrected slash in sys/stat.h include -20081031 lsp+mvh ELEKTA NKI-XVI4.15 RELEASE -20081119 lsp+sr Removed tell(f) call for Linux -20081203 lsp __sun__ -> unix -20090114 mvh ELEKTA NKI-XVI4.22 RELEASE -20090529 lsp+sr Work around the 64 MB limitation of write() in Windows -20090802 mvh ELEKTA NKI-XVI4.29 RELEASE -20091209 lsp Added WRITE_MEM_RAW -20091214 lsp 64 bits adaptations: pass high address of buffer as well, - replaced int by AVSINT when requested, process buffer in chunks - to be able to interpret return value of write() (signed int) correctly, - replaced out-of-range constants 0xc0 and 0x80 by their signed equivalents -20091216 lsp+ljz Prepared compression for more than 4294967295 (UINT_MAX) shorts - by using bigger NKI_MODE2_64BITS struct (backwards compatible) -20091216 lsp Disabled #define write for clarity: checked_write() is used throughout - Use more space for pCompressed to be able to call WRITE_XDR with compression - on small fields (<10 pixels for mode 2 or 4, <2 pixels for mode 1 and 3) -*/ - -/************************************************************************/ -/* MODULE DOCUMENTATION */ -/************************************************************************/ -/* -AVS Modules Lambert Zijp XDR writer & RAW writer - -NAME - XDR writer - Module for writing XDR and RAW files - -SUMMARY - Name XDR writer - - Availability : specify in which module libraries +// Based on a true story by the Nederlands Kanker Instituut (AVS_WXDR.CPP from the 20091216) - Source AVS_WXDR (C++ interface) - - Type Render / Output - - QUIRT name WRITE_XDR & WRITE_RAW - - Inputs Input field = field - - Outputs none - - Parameters Name Type Default Min Max - File name string - Header info string (WRITE_XDR only!) - Header file string (WRITE_XDR only!) - File Offset integer (WRITE_RAW only!) - NKI compression integer (WRITE_XDR only!) - Coords in header boolean (WRITE_XDR only!) - Append boolean (WRITE_XDR only!) - -DESCRIPTION - WRITE_RAW: No header, no coordinates. - Data only are written (high byte first); optionally into an - existing file (if you specify an offset) - - WRITE_RAW_LE: No header, no coordinates. - Data only are written (low byte first); - optionally into an existing file (if you specify an offset) - - WRITE_XDR: Successively is written to file: - - The string '#AVS wants ...'. - - The optional Header info - - The contents of the optional Header file - - An ascii description of the Input field - - Optionally the coordinates (coord%axis%[%pixel%]=%coord%) - (%axis% is 1 based, %pixel% 0 based, %coord% is float) - - Two bytes containing ascii character 0x0c - - The Data in binary (high byte first). - Or, if NKI_Compression is greater than zero, compressed data. - - The Coordinates in binary IEEE float (high byte first) - -INPUTS - Input field (Required; field) - Describe input here.... - -PARAMETERS - File name - A string described here.... - - Header info - A string described here.... - - Header file - A string described here.... - - File offset - An integer (default -1). If set, WRITE_RAW writes the data - into an existing file. - - NKI compression - An integer described here.... - - Write coordinates in header - A boolean described here.... - - Append to file - A boolean described here.... - -OUTPUTS - none - -PORTABILITY - QUIRT, C++ - -LIBRARIES - (optional): in which AVS libraries available - -TYPE - Render / Output - (optional): further specify type of Render / Output module - -FILE FORMATS - (optional): which type of files are read|written - -EXAMPLE - The following network shows how ..... - - READ IMA - | - | - XDR WRITER - | | - | | - -LIMITATIONS - (optional): describe limitations here - -RELATED MODULES - Modules that can provide input: - ..... - Modules that could be used in place of XDR writer: - ..... - Modules that can take output: - ..... - -RELATED FILES - (optional): The following files - {are needed for|are output from|give examples of|further document} - XDR writer: - ..... - - -QUIRT MANUAL - WRITE_XDR AVS module XDR writer - numerical_expression Input field = field - string_expression name of xdr file to create - string_expression extra header info (default "") - string_expression text file with more header info (default none) - numerical_expression NKI compression (default 0) - numerical_expression Coordinates in header (boolean, default 0) - numerical_expression Append to file (boolean, default 0) - - WRITE_RAW AVS module Raw writer - numerical_expression Input field = field - string_expression name of file to write - numerical_expression Offset; if not -1 (default) writes into file at offset - - WRITE_RAW_LE AVS module Raw writer little endian - numerical_expression Input field = field - string_expression name of file to write - numerical_expression Offset; if not -1 (default) writes into file at offset - - WRITE_MEM_XDR - numerical_expression Input field = field - numerical_expression point to buffer to write xdr data into (use QUERY_MEM_XDR to find length) - string_expression extra header info (default "") - string_expression text file with more header info (default none) - numerical_expression NKI compression (default 0) - numerical_expression Coordinates in header (boolean, default 0) - - QUERY_MEM_XDR - numerical_expression Input field = field - name recieves required length for data - string_expression extra header info (default "") - string_expression text file with more header info (default none) - numerical_expression NKI compression (default 0) - numerical_expression Coordinates in header (boolean, default 0) - -Release 1.0 19980212 Lambert Zijp XDR writer & RAW writer -*/ /************************************************************************/ /* INCLUDE FILES */ /************************************************************************/ @@ -340,21 +115,6 @@ Release 1.0 19980212 Lambert Zijp XDR writer & RAW writer /* DEFINES, ENUMERATED TYPES AND CONSTANTS */ /************************************************************************/ -//#undef fileno -//#define fileno _fileno -// -//#undef close -//#define close _close -// -//#undef open -//#define open _open -// -//#undef lseek -//#define lseek _lseek -// -//#undef creat -//#define creat _creat -// #pragma pack (1) // Fields with data size>8GB (having UINT_MAX short pixels) cannot be compressed using