* Special layout:
- Avoid code mixed with comments on a single line. Instead, prepend the
logical blocks of code with the concerned comments.
- - Use parantheses around conditions e.g. with an if statement:
+ - Use parentheses around conditions e.g. with an if statement:
if ( someLocalVariable == 2 ) { ... }
- Add spaces around parentheses, or braces. Use
- if ( someLocalVariable == 2 ) { ClassMenber += 1; }
+ if ( someLocalVariable == 2 ) { ClassMember += 1; }
and not
- if (someLocalVariable == 2) {ClassMenber += 1;}
+ if (someLocalVariable == 2) {ClassMember += 1;}
- Add spaces around each side of the assignement operator, and
around binary operators used in boolean expression. Use
someLocalVariable = ClassMember * 2;
use C style comments ("/* ... */").
- The last line of a file should terminate with "\n".
- Returned arguments of methods and functions should not be wrapped with
- parantheses. Use
+ parentheses. Use
return iter->second;
but do not use
return ( iter->second );
* \brief Within the Dicom Elements (parsed with the public and private
* dictionaries), look for the element value representation of
* a given tag.
- * @param group Group number of the searched tag.
+ * @param group Group number of the searched tag.
* @param elem Element number of the searched tag.
* @return Corresponding element value representation when it exists,
* and the string "gdcm::Unfound" otherwise.
T *foo = 0;
and not
T* foo = 0;
+ nor
+ T * foo;
- Assume T is a given type. When declaring or defining with the
"reference to T" notation, the & character must be adjacent to
- the variable and not the type. That is use
+ the variable and not the type. That is use :
T &foo = 0;
and not
T& foo = 0;
- This is the common notation, not a 'gdcm special' notation.
- (doxygen will not have any longer to correct)
+
+ (Doxygen will not have any longer to correct)
- Always define a typedef for a new type and be consistent in usage.
Use
- typedef Header* HeaderPointer;
+ typedef Header *HeaderPointer;
HeaderPointer MyHeaderPointer;
- One notorious counter example for non using C style inclusion concerns
exact-width integers (since there seem to be no equivalent for C++).
</TR>
<TR>
<TD> 1.2.840.10008.1.2 </TD>
- <TD> Little endian, implicit value representation</TD>
+ <TD> Implicit VR - Little Endian</TD>
</TR>
<TR>
<TD> 1.2.840.10008.1.2.1 </TD>
- <TD> Little endian, explicit value representation</TD>
+ <TD> Explicit VR - Little Endian</TD>
+</TR>
+<TR>
+ <TD> 1.2.840.10008.1.2.1.99</TD>
+ <TD> Deflated Explicit VR - Little Endian</TD>
</TR>
<TR>
<TD> 1.2.840.10008.1.2.2 </TD>
- <TD> Big endian </TD>
+ <TD> Explicit VR - Big Endian </TD>
+</TR>
+<TR>
+ <TD> 1.2.840.113619.5.2 </TD>
+ <TD> Implicit VR - Big Endian (G.E Private) </TD>
</TR>
+
<!####### RLE #########>
<TR BGCOLOR="#99ccff">
<TD> RLE Transfer Syntax </TD>
</TR>
<TR>
<TD> 1.2.840.10008.1.2.4.50 </TD>
- <TD> Jpeg laseline (Process 1)</TD>
+ <TD> JPEG Baseline (Process 1)</TD>
</TR>
<TR>
<TD> 1.2.840.10008.1.2.4.51 </TD>
- <TD> Jpeg extended (Process 2 & 4) </TD>
+ <TD> JPEG Extended (Process 2 & 4) </TD>
</TR>
<TR>
<TD> 1.2.840.10008.1.2.4.57 </TD>
- <TD> Jpeg lossless, non-hierarchical (process 14) </TD>
+ <TD> JPEG Lossless, Non-Hierarchical (Process 14) </TD>
</TR>
<TR>
<TD> 1.2.840.10008.1.2.4.70 </TD>
- <TD> Jpeg lossless, hierarchical, first-order
- prediction (process 14, selection value 1) </TD>
+ <TD> JPEG Lossless, Hierarchical, First-Order
+ Prediction (Process 14, [Selection Value 1]) </TD>
</TR>
</TABLE>
<!##############################################>
<H2>Supported "Photometric Interpretation" pixel format</H2>
-The Photometric Interpretation UID is in the file's DICOM Tag field (0028,0004).
+The Photometric Interpretation UID is in the file DICOM Tag field (0028,0004).
<TABLE WIDTH="800" BORDER="0" CELLSPACING="1" CELLPADDING="10"
BGCOLOR="#ffffff">
</TR>
<TR>
<TD> MONOCHROME1 </TD>
- <TD> </TD>
+ <TD> grey level image description</TD>
</TR>
<TR>
<TD> MONOCHROME2 </TD>
- <TD> </TD>
+ <TD> grey level image description</TD>
</TR>
<TR>
<TD> PALETTE COLOR </TD>
when in implicit VR) while reading a file, it will set that data
element's VR to be UN (unknown).
+<!##############################################>
+<H2> Note on missing 'Mandatory' Tags</H2>
+
+Each time it's possible to assume a 'reasonable' default value for missing
+'mandatory' tag, gdcm does it. <br>
+For instance if the Tag 'Samples Per Pixels' is missing, we assume its value is
+'1' (Grey pixels, as opposite to RGB); if the tag 'High BIt' is missing, we
+assume its value is 'Bits stored -1' (i.e. : no bad trick inside the pixels)<br>
+As gdcm wants to read *as well* old ACR-NEMA files, it has to be widely
+tolreant.
+
<!##############################################>
<H2>Note on retired and private data elements</H2>
<HR size="1"><ADDRESS style="align: right;"></ADDRESS>
<!#######################################################################>
-<H2>Dowload sources</H2>
+<H2>Download current sources</H2>
In order to retrieve the bleeding edge version (or any previous
version) of gdcm please refer to the
<A HREF="Cvs.html">gdcm cvs access</A>
page.
+
<!#######################################################################>
<HR size="1"><ADDRESS style="align: right;"></ADDRESS>
<H2>Packaged distributions of gdcm last stable
+ <A HREF="News.html#NewsVersion0_6">version 0.6</A>
+ (June 8 2004)
+</H2>
+
+Please refer to the
+ <A HREF="News.html#NewsVersion0_6">news on version 0.6</A>
+for more information on the features of this release.
+
+<UL>
+ <!###############################>
+ <LI><B>Win32</B>
+ <IMG src="Icons/os-windows.gif" alt="win95 logo"
+ nosave height=32 width=32>
+
+
+ <UL>
+ <LI> <B>Gdcm kernel</B>
+ <UL>
+ <LI>Zipped archive
+ <!-------
+ <A HREF="../GdcmPackages/bin20040608/gdcm-0.6.zip">gdcm-0.6.zip</A>,
+ -->
+ : <i>Sorry, not yet made</i>
+ </LI>
+ <LI> Windoze self installer
+ <!-------
+ <A HREF="../GdcmPackages/bin20040608/gdcm-0.6.exe"> gdcm-0.6.exe</A>.
+ -->
+ : <i>Sorry, not yet made</i>
+ </UL>
+ </LI>
+
+ <LI> <B>GdcmPython</B>
+ <UL>
+ <LI>Zipped archive
+ <!-------
+ <A HREF="../GdcmPackages/bin20040608/gdcmPython-0.6.zip">
+ gdcmPython-0.4.zip</A>,
+ ------>
+ : <i>Sorry, not yet made</i>
+ </LI>
+ <LI>Windoze self installer
+ <!-------
+ <A HREF="../GdcmPackages/bin20040608/gdcmPython-0.6.win32-py2.2.exe">
+ gdcmPython-0.6.win32-py2.2.exe</A>
+ (expects Python2.2.x).
+ ------>
+ : <i>Sorry, not yet made</i>
+ </LI>
+ </UL>
+ </LI>
+ </UL>
+
+
+
+ <!###############################>
+ <LI> <B>GNU/Linux RPM</B> packages
+ <IMG src="Icons/os-linux.gif" alt="win95 logo"
+ nosave height=32 width=32>
+ <UL>
+ <LI>Sources in a compressed tarball:
+ <!-------
+ <A HREF="../GdcmPackages/bin20040608/gdcm-0.6.0.zip">
+ gdcm-0.6.0.zip</A>.
+ ------>
+ : <i>Sorry, not yet made</i>
+ </LI>
+ <LI>Source rpm
+ <!-------
+ <A HREF="../GdcmPackages/bin20040608/gdcm-0.6.0-1.src.rpm">
+ gdcm-0.6.0-1.src.rpm</A>,
+ which requires swig 1.3.17.x [
+ <A HREF="http://www.creatis.insa-lyon.fr/rpm/swig13-1.3.17-1.i386.rpm">
+ swig13-1.3.17-1.i386.rpm</A>,
+ <A HREF="http://www.creatis.insa-lyon.fr/rpm/swig13-1.3.17-1.src.rpm">
+ swig13-1.3.17-1.src.rpm</A>]
+ ------>
+ : <i>Sorry, not yet made</i>
+ </LI>
+ <LI>Binary rpm
+ <!-------
+ <A HREF="../GdcmPackages/bin20040608/gdcm-0.4.0-1.i386.rpm">
+ gdcm-0.6.0-1.i386.rpm</A>.
+ ------>
+ : <i>Sorry, not yet made</i>
+ </LI>
+ </LI>
+ </UL>
+</UL>
+
+<B>Note:</B> The corresponding sources <b>must</b> be retrieved through cvs (see
+<A HREF="Cvs.html">gdcm cvs access</A>)
+with the cvs tag <B>Version0_6</B> e.g.
+<BR>
+<TT>cvs -d:pserver:frog@cvs.creatis.insa-lyon.fr:2402/cvs/public co
+ -r Version0_6 gdcm</TT>.
+
+<!#######################################################################>
+<HR size="1"><ADDRESS style="align: right;"></ADDRESS>
+<H2>Packaged distributions of gdcm
<A HREF="News.html#NewsVersion0_4">version 0.4</A>
(February 6 2004)
</H2>
/*=========================================================================
-Copyright (c) 1999-2003 CREATIS
+Copyright (c) 1999-2005 CREATIS
(CREATIS = Centre de Recherche et d'Applications en Traitement de l'Image)
All rights reserved.
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
- * The name of CREATIS, nor the names of any contributors (CNRS, INSERM, UCB,
- Universite Lyon I), may be used to endorse or promote products derived
- from this software without specific prior written permission.
+ * Neither the name of CREATIS, nor the names of any contributor (CNRS, INSERM,
+ INSA, Universite Claude-Bernard Lyon I), may be used to endorse or promote
+ products derived from this software without specific prior written permission.
* Modified source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
The
<A HREF="http://www.creatis.insa-lyon.fr/mailman/listinfo/dcmlib">
gdcm mailing list</A>
-has currently two flaws (unitl we fix that)
+has currently two flaws (until we fix that)
<UL>
- <LI> it is awkwardly named
+ <LI> It is awkwardly named
<TT>Dcmlib@creatis.insa-lyon.fr</TT>
(i.e. <TT>Dcmlib</TT> as opposed to the expected <TT>gdcm</TT>),
</LI>
- <LI> since the developpers are mainly french (sorry) the
+ <LI> Since the developpers are mainly french (sorry) the
<A HREF="http://www.creatis.insa-lyon.fr/pipermail/dcmlib/">
- archives</A> are in french (sorry again). But if you post
- a question in english we'll promiss to answer in basic english !
+ archives</A> are in french (sorry again). <br>But if you post
+ a question in english we promise to answer in basic english !
</LI>
</UL>
<A HREF="http://www.creatis.insa-lyon.fr/mailman/listinfo/dcmlib">
Gdcm mailing list web page</A>
-allows you subscribe and/or to perform any administrative task on this
+allows you to subscribe and/or to perform any administrative task on this
mailing list.
<BR>
<B>D</B>i<B>C</B>o<B>M</B>.
<!###################################>
-<H2>What gdcm IS</H2>
+<H2>What gdcm <font color=#00ff00>IS</font></H2>
<UL>
<LI>gdcm implements the
<A HREF="http://www.dclunie.com/dicom-status/status.html">
Please refer to
<A HREF="ConformanceSummary.html">gdcm conformance summary</A>
for more details.
+ <LI>Papyrus V2 and V3 file headers are readable; the user will have to use low level
+accessors if he wants to get the image pixels -sorry-
</LI>
</UL>
</LI>
</UL>
<!###################################>
-<H2>What gdcm is NOT</H2>
+<H2>What gdcm is <font color=#ff0000>NOT</font></H2>
Except for
<A HREF="http://www.dclunie.com/dicom-status/status.html">
gdcm does NOT implement any other part of the Dicom base standard
(as opposed to other C++ based with open license libraries like
<A HREF="http://www.offis.de/projekte/ig/dicom/soft-docs/soft01_d.html">
- DCMTK </A>.
+ DCMTK</A>
or
<A HREF="http://www.erl.wustl.edu/DICOM/ctn.html">CTN</A>).
<BR>
<UL>
<LI>the Dicom network file exchange protocol (Query/Retrieve),
</LI>
-<LI>the Dicom media storage formats,
+<LI>the Dicom media storage formats (well ... it knows about the DICOMDIR
+-reading and writing- and its parts PATIENT, STUDY, SERIES, IMAGE)
</LI>
<LI>Print, Verification
</LI>
gdcm doesn't implement (yet?)
<UL>
<LI>the integration of (optional) overlays on image.
- </LI>
- <LI>a more complete supports of the
- <A HREF="ConformanceSummary.html">various Jpeg encodings</A>
- </LI>
+ </li>
+ <LI>a support to write files according to the
+ <A HREF="ConformanceSummary.html">various classical Jpeg encodings</A>
+ (only read methods are provided)
+ </li>
+ <LI>a support to deal with JPEG 2000 encodings</A>
+ </li>
</UL>
Gdcm also still needs
<UL>
<!#######################################################################>
<H1>Gdcm News</a></H1>
+
+<!#######################################################################>
<HR size="1"><ADDRESS style="align: right;"></ADDRESS>
+<H2>
+ <A CLASS="anchor" NAME="NewsCurrentVersion">
+ <B>Current Version</B></A>
+ <B></B></A>
+</H2>
+<UL>
+ <LI> Final check of the jpeg sub-library: all kinds of jpeg
+ compressed Dicom files (but jpeg2000) can be read
+ <LI> Use of <TT> namespace</TT> : all the methods formerly called
+ <TT>className::gdcmXxx()</TT> are now called <TT>className::Xxx()</TT>
+ <LI> Removal of accessors <TT>GetXxxByname</TT>, <TT>SetXxxByname</TT>
+ and <TT>GetXxxByNumber</TT>, <TT>SetXxxByNumber</TT>
+ replaced by <TT>GetXxx</TT>, <TT>SetXxx</TT>
+ <LI> A huge number of memory leaks removed
+ <LI> All the previously gdcm-breaker images are now readable
+ <LI> Improvement of write process
+</UL>
+
+
<!#######################################################################>
+<HR size="1"><ADDRESS style="align: right;"></ADDRESS>
+<H2>
+ <A CLASS="anchor" NAME="NewsVersion0_6">
+ <B>Version 0.6 (June 8 2004)</B></A>
+</H2>
+<UL>
+ This version will be used by Insight Tool Kit
+ (<a href="http://www.itk.org">ITK</a> 2.0) at the beginning of 2005.<br>
+ It's not yet packaged ...<br><br>
+ <LI> The new <TT>gdcmDocument</TT> class is a parent class of
+ <TT>gdcmHeader</TT> class and <TT>gdcmDicomDir</TT> class.
+ <LI> Massive modifications in the Class Diagram :
+ <UL>
+ <LI> Entries (<TT>gdcmEntry</TT>) are now separated into
+ <TT>ValEntry</TT> and <TT>SeqEntry</TT> (whose VR =
+ <TT>SQ</TT>)
+ <LI> a <TT>gdcmDocument</TT> is_a <TT>gdcmElementSet</TT>,
+ composed of a set of <TT>gdcmValEntry</TT>
+ and <TT>gdcmSeqEntry</TT>
+ <LI> a <TT>gdcmSeqEntry</TT> is considered as a set
+ of <TT>gdcmSQItem</TT>
+ <LI> Dicom Sequences (VR = <TT>SQ</TT>) are now dealt as tree-like
+ structures within <TT>gdcmSQItem</TT> class.<br>
+ they are considered as a set of <TT>gdcmSQItem</TT>s
+ <LI> a <TT>gdcmSQItem</TT> is_a <TT>gdcmElementSet</TT>
+ </UL>
+ <LI> Improvement of the jpeg sub-library: jpeg
+ compressed Dicom files (lossless and lossy)
+ might be read (check-it out)
+</UL>
+
+<!#######################################################################>
+<HR size="1"><ADDRESS style="align: right;"></ADDRESS>
<H2>
<A CLASS="anchor" NAME="NewsVersion0_4">
<B>Version 0.4 (February 6 2004)</B></A>
</H2>
<UL>
- <LI> <TT>gdcmFile</TT> class now enables acces to the data
- i.e. the image[s] content. Previously only parsing of the
- Dicom header was available through usage of <TT>gdcmHeader</TT>
- class.
- <LI> a <A HREF="http://public.kitware.com/VTK/">VTK</A> plugin
- of gdcm is now available through the <TT>vtkGdcmReader</TT>
- vtk class (see it as a vtk wrapper of gdcm), which enables
- <UL>
- <LI> Loading of a single image,
- <LI> Loading of a stack of images from multiple Dicom files,
- <LI> this class is wrapped for vtkPython (by using native vtk
- wrappers).
- </UL>
- <LI> Introduction of a jpeg sub-library: some very simple jpeg
+ <LI> Introduction of a jpeg sub-library: some very simple jpeg-lossy
compressed Dicom files might be working (check-it out).
<LI> And also, fewer memory leaks, cleaned-up stl usage (should work
with gcc-3.x), python disutil installer (see file setup.py)
supporting both Swig and vtk wrapping.
+ <LI> Introduction of a RLE (Run-Time Encoding) library
+ <LI> Color images (RGB or Palette Color) are dealt with
+
</UL>
<!#######################################################################>
<LI> this class is wrapped for vtkPython (by using native vtk
wrappers).
</UL>
- <LI> Introduction of a jpeg sub-library: some very simple jpeg
- compressed Dicom files might be working (check-it out).
- <LI> And also, fewer memory leaks, cleaned-up stl usage (should work
- with gcc-3.x), python disutil installer (see file setup.py)
- supporting both Swig and vtk wrapping.
+ <LI> Introduction of a jpeg sub-library: lossless-jpeg
+ compressed Dicom files work.
+<LI> <TT>vtkgdcmViewer</TT> allows easy displaying of single/multiframe
+ GreyLevel/RGB/PaletteColor images
</UL>
<!#######################################################################>
<HR size="1"><ADDRESS style="align: right;"></ADDRESS>
Gdcm is hosted at
<A HREF="http://www.creatis.insa-lyon.fr">CREATIS</A>) </H2>
-<BR>
-The developpers are (alphabetical order)
+<BR><br>
+
+The historical developpers are (alphabetical order)
<UL>
-<LI> Florez Leonardo (Creatis/Theralis)
+<LI> Eric Boix (Creatis)
+</LI>
+<LI> Leonardo Florez (Creatis/Theralys)
+</LI>
+<LI> Emmanuel Olart (Theralys)
</LI>
-<LI> Ibanez Luis (Kitware)
+</UL>
+
+The current developpers are (alphabetical order)
+<UL>
+<LI> Luis Ibanez (Kitware)
</LI>
-<LI> Malaterre Mathieu (Kitware)
+<LI> Mathieu Malaterre (Kitware)
</LI>
-<LI> Olart Emmanuel (Theralys)
+<LI> Benoit Regrain (Creatis)
+</LI>
+<LI> Jean-Pierre Roux (Creatis)
+</LI>
+</UL>
+
+The contributors are
+<UL>
+<LI> Hugues Benoit-Cattin
</LI>
-<LI> Regrain Benoit (Creatis)
+<LI> Fabrice Bellet
</LI>
-<LI> Roux Jean-Pierre (Creatis)
+<LI> Jean-Michel Rouet
</LI>
-<LI> Boix Eric (Creatis)
+<LI> Peter Cech
</LI>
</UL>