gdcmBitmap.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program: GDCM (Grassroots DICOM). A DICOM library
00004   Module:  $URL$
00005 
00006   Copyright (c) 2006-2009 Mathieu Malaterre
00007   All rights reserved.
00008   See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details.
00009 
00010      This software is distributed WITHOUT ANY WARRANTY; without even
00011      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00012      PURPOSE.  See the above copyright notice for more information.
00013 
00014 =========================================================================*/
00015 #ifndef __gdcmBitmap_h
00016 #define __gdcmBitmap_h
00017 
00018 #include "gdcmObject.h"
00019 #include "gdcmCurve.h"
00020 #include "gdcmDataElement.h"
00021 //#include "gdcmIconImage.h"
00022 #include "gdcmLookupTable.h"
00023 #include "gdcmOverlay.h"
00024 #include "gdcmPhotometricInterpretation.h"
00025 #include "gdcmPixelFormat.h"
00026 #include "gdcmSmartPointer.h"
00027 #include "gdcmTransferSyntax.h"
00028 
00029 #include <vector>
00030 
00031 namespace gdcm
00032 {
00033   
00039 class GDCM_EXPORT Bitmap : public Object
00040 {
00041 public:
00042   Bitmap();
00043   ~Bitmap();
00044   void Print(std::ostream &) const {}
00045 
00046   virtual bool AreOverlaysInPixelData() const { return false; }
00047 
00049   unsigned int GetNumberOfDimensions() const;
00050   void SetNumberOfDimensions(unsigned int dim);
00051 
00053   unsigned int GetPlanarConfiguration() const;
00054   void SetPlanarConfiguration(unsigned int pc);
00055 
00056   bool GetNeedByteSwap() const
00057     {
00058     return NeedByteSwap;
00059     }
00060   void SetNeedByteSwap(bool b)
00061     {
00062     NeedByteSwap = b;
00063     }
00064 
00065 
00067   void SetTransferSyntax(TransferSyntax const &ts) {
00068     TS = ts;
00069   }
00070   const TransferSyntax &GetTransferSyntax() const {
00071     return TS;
00072   }
00073   void SetDataElement(DataElement const &de) {
00074     PixelData = de;
00075   }
00076   const DataElement& GetDataElement() const { return PixelData; }
00077   DataElement& GetDataElement() { return PixelData; }
00078 
00080   void SetLUT(LookupTable const &lut)
00081     {
00082     LUT = SmartPointer<LookupTable>( const_cast<LookupTable*>(&lut) );
00083     }
00084   const LookupTable &GetLUT() const
00085     {
00086     return *LUT;
00087     }
00088   LookupTable &GetLUT()
00089     {
00090     return *LUT;
00091     }
00092 
00093 
00095   const unsigned int *GetDimensions() const;
00096   unsigned int GetDimension(unsigned int idx) const;
00097 
00098   void SetColumns(unsigned int col) { SetDimension(0,col); }
00099   unsigned int GetColumns() const { return GetDimension(0); }
00100   void SetRows(unsigned int rows) { SetDimension(1,rows); }
00101   unsigned int GetRows() const { return GetDimension(1); }
00102   void SetDimensions(const unsigned int dims[3]);
00103   void SetDimension(unsigned int idx, unsigned int dim);
00105   const PixelFormat &GetPixelFormat() const
00106     {
00107     return PF;
00108     }
00109   PixelFormat &GetPixelFormat()
00110     {
00111     return PF;
00112     }
00113   void SetPixelFormat(PixelFormat const &pf)
00114     {
00115     PF = pf;
00116     PF.Validate();
00117     }
00118 
00120   const PhotometricInterpretation &GetPhotometricInterpretation() const;
00121   void SetPhotometricInterpretation(PhotometricInterpretation const &pi);
00122 
00123   bool IsEmpty() const { return Dimensions.size() == 0; }
00124   void Clear();
00125 
00129   unsigned long GetBufferLength() const;
00130 
00132   bool GetBuffer(char *buffer) const;
00133 
00135   bool IsLossy() const;
00136 
00138   void SetLossyFlag(bool f) { LossyFlag = f; }
00139 
00140 protected:
00141   bool TryRAWCodec(char *buffer, bool &lossyflag) const;
00142   bool TryJPEGCodec(char *buffer, bool &lossyflag) const;
00143   bool TryPVRGCodec(char *buffer, bool &lossyflag) const;
00144   bool TryJPEGLSCodec(char *buffer, bool &lossyflag) const;
00145   bool TryJPEG2000Codec(char *buffer, bool &lossyflag) const;
00146   bool TryRLECodec(char *buffer, bool &lossyflag) const;
00147 
00148   bool TryJPEGCodec2(std::ostream &os) const;
00149   bool TryJPEG2000Codec2(std::ostream &os) const;
00150 
00151   bool GetBuffer2(std::ostream &os) const;
00152 
00153   friend class PixmapReader;
00154   friend class ImageChangeTransferSyntax;
00155   bool ComputeLossyFlag();
00156 
00157 //private:
00158 protected:
00159   unsigned int PlanarConfiguration;
00160   unsigned int NumberOfDimensions;
00161   TransferSyntax TS;
00162   PixelFormat PF; // SamplesPerPixel, BitsAllocated, BitsStored, HighBit, PixelRepresentation
00163   PhotometricInterpretation PI;
00164   // Mind dump: unsigned int is required here, since we are reading (0028,0008) Number Of Frames
00165   // which is VR::IS, so I cannot simply assumed that unsigned short is enough... :(
00166   std::vector<unsigned int> Dimensions; // Col/Row
00167   DataElement PixelData; // copied from 7fe0,0010
00168 
00169   typedef SmartPointer<LookupTable> LUTPtr;
00170   LUTPtr LUT;
00171   // I believe the following 3 ivars can be derived from TS ...
00172   bool NeedByteSwap;
00173   bool LossyFlag;
00174 
00175 private:
00176   bool GetBufferInternal(char *buffer, bool &lossyflag) const;
00177 };
00178 
00179 } // end namespace gdcm
00180 
00181 #endif //__gdcmBitmap_h

Generated on Wed Jun 30 13:49:13 2010 for GDCM by doxygen 1.6.3
SourceForge.net Logo