ImageProcess.hpp 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. /***************************************************************************
  2. * E-Com Technology Ltd.
  3. *
  4. * ECOMPACS DICOM Network Transport Libraries * Version 0.1 Beta
  5. ***************************************************************************/
  6. #ifndef __IMAGE_PROCESS__
  7. #define __IMAGE_PROCESS__
  8. class TransferSyntax;
  9. //////////////////////////////////////////////////////////////////////
  10. // class ImageProcess
  11. class DICOM_API ImageProcess
  12. {
  13. public:
  14. UINT32 ImageHandle0; // Used for display system, such as HBITMAP or HDIB
  15. UINT32 ImageHandle1; // Used for display system, such as HPALETTE or Palette index
  16. UINT32 ImageHandle2; // Other handles
  17. UINT32 ImageHandle3;
  18. public:
  19. void * RawPixelData; // Raw Pixel Data (decompressed)
  20. UINT32 RawPixelLength;
  21. UINT16 RawBitsAllocated; // (0028,0100)
  22. UINT16 RawBitsStored; // (0028,0101)
  23. UINT16 RawHighBit; // (0028,0102)
  24. UINT16 Rows; // (0028,0010)
  25. UINT16 Columns; // (0028,0011)
  26. void * CompPixelData; // Pixel Data (compressed)
  27. UINT32 CompPixelLength;
  28. UINT16 CompBitsAllocated; // (0028,0100)
  29. UINT16 CompBitsStored; // (0028,0101)
  30. UINT16 CompHighBit; // (0028,0102)
  31. int WindowCenter; // (0028,1050)
  32. int WindowWidth; // (0028,1051)
  33. UINT16 usSmallestValue; // (0028,0106)
  34. INT16 ssSmallestValue; // (0028,0106)
  35. UINT16 usLargestValue; // (0028,0107)
  36. INT16 ssLargestValue; // (0028,0107)
  37. double PixelSpacingX; // (0028,0030)
  38. double PixelSpacingY; // (0028,0030)
  39. double RescaleIntercept; // (0028,1052)
  40. double RescaleSlope; // (0028,1053)
  41. int NumberOfFrames; // (0028,0008)
  42. int FrameIndex; //
  43. UINT16 PixelRepresentation; // (0028,0103)
  44. char PhotometricInterpretation[65]; // (0028,0004)
  45. char Modality[17];
  46. DICOMImage & DicomImage;
  47. int JPEGQuality;
  48. UINT32 lParam;
  49. public:
  50. static BYTE LUT244To256 [256];
  51. static BYTE LUT256To244 [256];
  52. protected:
  53. static void Init256_244LUT (void);
  54. public:
  55. ImageProcess (DICOMImage & theImage, int FrameIndex = 0);
  56. ~ImageProcess ();
  57. void Reset (void);
  58. void SetTransferSyntax (const UID & TrnsynUID);
  59. void ReleasePixelData (void);
  60. void * Detach (void);
  61. BOOL ConvertTo (const UID & TrnsynUID);
  62. BOOL ConvertToRaw (void);
  63. BOOL JPEGBaselineEncode (void);
  64. BOOL JPEGBaselineDecode (void);
  65. BOOL JPEGProc14Encode (void);
  66. BOOL JPEGProc14Decode (void);
  67. BOOL JPEGProc14SV1Encode (void);
  68. BOOL JPEGProc14SV1Decode (void);
  69. BOOL JPEGExtendedProcEncode (void);
  70. BOOL JPEGExtendedProcDecode (void);
  71. BOOL JPEGSpectralProcEncode (void);
  72. BOOL JPEGSpectralProcDecode (void);
  73. BOOL JPEGFullProgressEncode (void);
  74. BOOL JPEGFullProgressDecode (void);
  75. BOOL RLEEncode (void);
  76. BOOL RLEDecode (void);
  77. BOOL JP2KLosslessEncode (void);
  78. BOOL JP2KLosslessDecode (void);
  79. BOOL JP2KLossyEncode (void);
  80. BOOL JP2KLossyDecode (void);
  81. BOOL AutoWindowLevel (void);
  82. BOOL Invert (void);
  83. BOOL Remap (void);
  84. BOOL SaveAsWindowsBitmap (const char * filename);
  85. BOOL SaveAsJPEGBaseline (const char * filename);
  86. BOOL SaveAsRaw (const char * filename);
  87. BOOL SetAutoRemoveImage (BOOL bRemove)
  88. {
  89. BOOL bOld = bAutoRemoveImage;
  90. bAutoRemoveImage = bRemove;
  91. return bOld;
  92. }
  93. RealImage * CreateRealImage (void);
  94. protected:
  95. TransferSyntax * ImageTransferSyntax;
  96. void * OrgPixelData; // Formated for .BMP (adjusted for window level and center)
  97. UINT32 OrgPixelLength;
  98. BOOL IsColor;
  99. BOOL bAutoRemoveImage;
  100. private:
  101. BOOL UpdateSelf ();
  102. void ReleaseRawPixelData ();
  103. void ReleaseCompPixelData ();
  104. protected:
  105. BOOL ConvertToCompress (const UID & TrnsynUID);
  106. BOOL ConvertToDecompress (void);
  107. public:
  108. static BOOL AutoWindowLevel_UINT8 (void * PixelData, int Width, int Height, int Depth, int * WindowWidth, int * WindowCenter);
  109. static BOOL AutoWindowLevel_INT16 (void * PixelData, int Width, int Height, int Depth, int * WindowWidth, int * WindowCenter);
  110. static BOOL AutoWindowLevel_UINT16 (void * PixelData, int Width, int Height, int Depth, int * WindowWidth, int * WindowCenter);
  111. friend DICOMImage;
  112. };
  113. #endif