ITK  5.1.0
Insight Toolkit
itkGDCMImageIO.h
Go to the documentation of this file.
1 /*=========================================================================
2  *
3  * Copyright NumFOCUS
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0.txt
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  *=========================================================================*/
18 /*=========================================================================
19  *
20  * Portions of this file are subject to the VTK Toolkit Version 3 copyright.
21  *
22  * Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
23  *
24  * For complete copyright, license and disclaimer of warranty information
25  * please refer to the NOTICE file at the top of the ITK source tree.
26  *
27  *=========================================================================*/
28 #ifndef itkGDCMImageIO_h
29 #define itkGDCMImageIO_h
30 
31 #include "itkCommonEnums.h"
32 #include "itkImageIOBase.h"
33 #include "ITKIOGDCMExport.h"
34 #include <fstream>
35 #include <string>
36 
37 
38 #if !defined(ITK_LEGACY_REMOVE)
39 # define ITKIO_DEPRECATED_GDCM1_API
40 #endif
41 
42 
43 namespace itk
44 {
50 {
51 public:
56  enum class Compression : uint8_t
57  {
58  JPEG = 0,
59  JPEG2000,
60  JPEGLS,
61  RLE
62  };
63 };
64 // Define how to print enumeration
65 extern ITKIOGDCM_EXPORT std::ostream &
66  operator<<(std::ostream & out, const GDCMImageIOEnums::Compression value);
67 
110 class InternalHeader;
111 class ITKIOGDCM_EXPORT GDCMImageIO : public ImageIOBase
112 {
113 public:
114  ITK_DISALLOW_COPY_AND_ASSIGN(GDCMImageIO);
116 
118  using Self = GDCMImageIO;
121 
123  itkNewMacro(Self);
124 
126  itkTypeMacro(GDCMImageIO, Superclass);
127 
128  /*-------- This part of the interface deals with reading data. ------ */
129 
132  bool
133  CanReadFile(const char *) override;
134 
136  void
137  ReadImageInformation() override;
138 
140  void
141  Read(void * buffer) override;
142 
146  itkGetEnumMacro(InternalComponentType, ::itk::CommonEnums::IOComponent);
147  itkSetEnumMacro(InternalComponentType, ::itk::CommonEnums::IOComponent);
149 
150  /*-------- This part of the interfaces deals with writing data. ----- */
151 
154  bool
155  CanWriteFile(const char *) override;
156 
159  void
160  WriteImageInformation() override;
161 
164  void
165  Write(const void * buffer) override;
166 
170  itkGetConstMacro(RescaleSlope, double);
171  itkGetConstMacro(RescaleIntercept, double);
173 
178  itkGetStringMacro(UIDPrefix);
179  itkSetStringMacro(UIDPrefix);
181 
183  itkGetStringMacro(StudyInstanceUID);
184  itkGetStringMacro(SeriesInstanceUID);
185  itkGetStringMacro(FrameOfReferenceInstanceUID);
187 
190  itkSetMacro(KeepOriginalUID, bool);
191  itkGetConstMacro(KeepOriginalUID, bool);
192  itkBooleanMacro(KeepOriginalUID);
194 
198  itkSetMacro(LoadPrivateTags, bool);
199  itkGetConstMacro(LoadPrivateTags, bool);
200  itkBooleanMacro(LoadPrivateTags);
202 
206  itkSetMacro(ReadYBRtoRGB, bool);
207  itkGetConstMacro(ReadYBRtoRGB, bool);
208  itkBooleanMacro(ReadYBRtoRGB);
210 
211 #if defined(ITKIO_DEPRECATED_GDCM1_API)
212 
218  void
219  GetPatientName(char * name, size_t len = 512);
220 
221  void
222  GetPatientID(char * id, size_t len = 512);
223 
224  void
225  GetPatientSex(char * sex, size_t len = 512);
226 
227  void
228  GetPatientAge(char * age, size_t len = 512);
229 
230  void
231  GetStudyID(char * id, size_t len = 512);
232 
233  void
234  GetPatientDOB(char * dob, size_t len = 512);
235 
236  void
237  GetStudyDescription(char * desc, size_t len = 512);
238 
239  void
240  GetBodyPart(char * part, size_t len = 512);
241 
242  void
243  GetNumberOfSeriesInStudy(char * series, size_t len = 512);
244 
245  void
246  GetNumberOfStudyRelatedSeries(char * series, size_t len = 512);
247 
248  void
249  GetStudyDate(char * date, size_t len = 512);
250 
251  void
252  GetModality(char * modality, size_t len = 512);
253 
254  void
255  GetManufacturer(char * manu, size_t len = 512);
256 
257  void
258  GetInstitution(char * ins, size_t len = 512);
259 
260  void
261  GetModel(char * model, size_t len = 512);
262 
263  void
264  GetScanOptions(char * options, size_t len = 512);
265 #endif
266 
270  bool
271  GetValueFromTag(const std::string & tag, std::string & value);
272 
279  static bool
280  GetLabelFromTag(const std::string & tag, std::string & labelId);
281 
282 #if defined(ITKIO_DEPRECATED_GDCM1_API)
283 
290  virtual void
291  SetMaxSizeLoadEntry(const long)
292  {}
293 
299  virtual void
300  SetLoadSequences(const bool)
301  {}
302  virtual bool
303  GetLoadSequences() const
304  {
305  return true;
306  }
307  virtual void
308  LoadSequencesOn()
309  {}
310  virtual void
311  LoadSequencesOff()
312  {}
314 
323  static void
324  SetLoadSequencesDefault(bool)
325  {}
326  static void
327  LoadSequencesDefaultOn()
328  {}
329  static void
330  LoadSequencesDefaultOff()
331  {}
332  static bool
333  GetLoadSequencesDefault()
334  {
335  return true;
336  }
338 
347  static void
348  SetLoadPrivateTagsDefault(bool)
349  {}
350  static void
351  LoadPrivateTagsDefaultOn()
352  {}
353  static void
354  LoadPrivateTagsDefaultOff()
355  {}
356  static bool
357  GetLoadPrivateTagsDefault()
358  {
359  return true;
360  }
361 #endif
362 
363 
364 
366 #if !defined(ITK_LEGACY_REMOVE)
367  // We need to expose the enum values at the class level
368  // for backwards compatibility
369  static constexpr CompressionEnum JPEG = CompressionEnum::JPEG;
370  static constexpr CompressionEnum JPEG2000 = CompressionEnum::JPEG2000;
371  static constexpr CompressionEnum JPEGLS = CompressionEnum::JPEGLS;
372  static constexpr CompressionEnum RLE = CompressionEnum::RLE;
373 #endif
374 
375  itkSetEnumMacro(CompressionType, CompressionEnum);
376  itkGetEnumMacro(CompressionType, CompressionEnum);
377 
378  void
379  InternalSetCompressor(const std::string & _compressor) override;
380 
381 protected:
382  GDCMImageIO();
383  ~GDCMImageIO() override;
384  void
385  PrintSelf(std::ostream & os, Indent indent) const override;
386 
387  void
388  InternalReadImageInformation();
389 
392 
393  std::string m_UIDPrefix;
394  std::string m_StudyInstanceUID;
395  std::string m_SeriesInstanceUID;
397 
399 
401 
403 
404 private:
405 #if defined(ITKIO_DEPRECATED_GDCM1_API)
406  std::string m_PatientName;
407  std::string m_PatientID;
408  std::string m_PatientDOB;
409  std::string m_StudyID;
410  std::string m_StudyDescription;
411  std::string m_BodyPart;
412  std::string m_NumberOfSeriesInStudy;
413  std::string m_NumberOfStudyRelatedSeries;
414  std::string m_PatientSex;
415  std::string m_PatientAge;
416  std::string m_StudyDate;
417  std::string m_Modality;
418  std::string m_Manufacturer;
419  std::string m_Institution;
420  std::string m_Model;
421  std::string m_ScanOptions;
422 #endif
423 
428 
430  InternalHeader * m_DICOMHeader;
431 };
432 } // end namespace itk
433 
434 #endif // itkGDCMImageIO_h
itk::ImageIOBase
Abstract superclass defines image IO interface.
Definition: itkImageIOBase.h:75
itk::GDCMImageIOEnums::Compression
Compression
Definition: itkGDCMImageIO.h:56
itk::uint8_t
::uint8_t uint8_t
Definition: itkIntTypes.h:29
itk::GDCMImageIO::m_SeriesInstanceUID
std::string m_SeriesInstanceUID
Definition: itkGDCMImageIO.h:395
itk::operator<<
std::ostream & operator<<(std::ostream &os, const Array< TValue > &arr)
Definition: itkArray.h:213
itk::GDCMImageIO::m_DICOMHeader
InternalHeader * m_DICOMHeader
Definition: itkGDCMImageIO.h:430
itk::GDCMImageIO::m_CompressionType
CompressionEnum m_CompressionType
Definition: itkGDCMImageIO.h:427
itk::GDCMImageIOEnums
Definition: itkGDCMImageIO.h:49
itk::GDCMImageIO::m_UIDPrefix
std::string m_UIDPrefix
Definition: itkGDCMImageIO.h:393
itk::GDCMImageIOEnums::Compression::RLE
itk::GDCMImageIO::m_InternalComponentType
IOComponentEnum m_InternalComponentType
Definition: itkGDCMImageIO.h:429
itk::GDCMImageIO::m_RescaleSlope
double m_RescaleSlope
Definition: itkGDCMImageIO.h:390
itk::SmartPointer< Self >
itk::CommonEnums::IOComponent
IOComponent
Definition: itkCommonEnums.h:76
itk::Indent
Control indentation during Print() invocation.
Definition: itkIndent.h:49
itk::GDCMImageIO::m_GlobalNumberOfDimensions
unsigned int m_GlobalNumberOfDimensions
Definition: itkGDCMImageIO.h:426
itk::GDCMImageIO::m_RescaleIntercept
double m_RescaleIntercept
Definition: itkGDCMImageIO.h:391
itk::GDCMImageIO::m_LoadPrivateTags
bool m_LoadPrivateTags
Definition: itkGDCMImageIO.h:400
itk::LightObject
Light weight base class for most itk classes.
Definition: itkLightObject.h:59
itk::GDCMImageIOEnums::Compression::JPEGLS
itk::GDCMImageIO::m_FrameOfReferenceInstanceUID
std::string m_FrameOfReferenceInstanceUID
Definition: itkGDCMImageIO.h:396
itk::GDCMImageIOEnums::Compression::JPEG2000
itk::GDCMImageIOEnums::Compression::JPEG
itk::GDCMImageIO
ImageIO class for reading and writing DICOM V3.0 and ACR/NEMA 1&2 uncompressed images....
Definition: itkGDCMImageIO.h:111
itkImageIOBase.h
itk
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....
Definition: itkArray.h:26
itk::GDCMImageIO::m_KeepOriginalUID
bool m_KeepOriginalUID
Definition: itkGDCMImageIO.h:398
itkCommonEnums.h
Compression
itk::Object
Base class for most ITK classes.
Definition: itkObject.h:60
itk::GDCMImageIO::m_ReadYBRtoRGB
bool m_ReadYBRtoRGB
Definition: itkGDCMImageIO.h:402
itk::GDCMImageIO::m_StudyInstanceUID
std::string m_StudyInstanceUID
Definition: itkGDCMImageIO.h:394