/*************************************************************************** * E-Com Technology Ltd. * * ECOMPACS DICOM Network Transport Libraries * Version 0.1 Beta ***************************************************************************/ #ifndef __IMAGE_PROCESS__ #define __IMAGE_PROCESS__ class TransferSyntax; ////////////////////////////////////////////////////////////////////// // class ImageProcess class DICOM_API ImageProcess { public: UINT32 ImageHandle0; // Used for display system, such as HBITMAP or HDIB UINT32 ImageHandle1; // Used for display system, such as HPALETTE or Palette index UINT32 ImageHandle2; // Other handles UINT32 ImageHandle3; public: void * RawPixelData; // Raw Pixel Data (decompressed) UINT32 RawPixelLength; UINT16 RawBitsAllocated; // (0028,0100) UINT16 RawBitsStored; // (0028,0101) UINT16 RawHighBit; // (0028,0102) UINT16 Rows; // (0028,0010) UINT16 Columns; // (0028,0011) void * CompPixelData; // Pixel Data (compressed) UINT32 CompPixelLength; UINT16 CompBitsAllocated; // (0028,0100) UINT16 CompBitsStored; // (0028,0101) UINT16 CompHighBit; // (0028,0102) int WindowCenter; // (0028,1050) int WindowWidth; // (0028,1051) UINT16 usSmallestValue; // (0028,0106) INT16 ssSmallestValue; // (0028,0106) UINT16 usLargestValue; // (0028,0107) INT16 ssLargestValue; // (0028,0107) double PixelSpacingX; // (0028,0030) double PixelSpacingY; // (0028,0030) double RescaleIntercept; // (0028,1052) double RescaleSlope; // (0028,1053) int NumberOfFrames; // (0028,0008) int FrameIndex; // UINT16 PixelRepresentation; // (0028,0103) char PhotometricInterpretation[65]; // (0028,0004) char Modality[17]; DICOMImage & DicomImage; int JPEGQuality; UINT32 lParam; public: static BYTE LUT244To256 [256]; static BYTE LUT256To244 [256]; protected: static void Init256_244LUT (void); public: ImageProcess (DICOMImage & theImage, int FrameIndex = 0); ~ImageProcess (); void Reset (void); void SetTransferSyntax (const UID & TrnsynUID); void ReleasePixelData (void); void * Detach (void); BOOL ConvertTo (const UID & TrnsynUID); BOOL ConvertToRaw (void); BOOL JPEGBaselineEncode (void); BOOL JPEGBaselineDecode (void); BOOL JPEGProc14Encode (void); BOOL JPEGProc14Decode (void); BOOL JPEGProc14SV1Encode (void); BOOL JPEGProc14SV1Decode (void); BOOL JPEGExtendedProcEncode (void); BOOL JPEGExtendedProcDecode (void); BOOL JPEGSpectralProcEncode (void); BOOL JPEGSpectralProcDecode (void); BOOL JPEGFullProgressEncode (void); BOOL JPEGFullProgressDecode (void); BOOL RLEEncode (void); BOOL RLEDecode (void); BOOL JP2KLosslessEncode (void); BOOL JP2KLosslessDecode (void); BOOL JP2KLossyEncode (void); BOOL JP2KLossyDecode (void); BOOL AutoWindowLevel (void); BOOL Invert (void); BOOL Remap (void); BOOL SaveAsWindowsBitmap (const char * filename); BOOL SaveAsJPEGBaseline (const char * filename); BOOL SaveAsRaw (const char * filename); BOOL SetAutoRemoveImage (BOOL bRemove) { BOOL bOld = bAutoRemoveImage; bAutoRemoveImage = bRemove; return bOld; } RealImage * CreateRealImage (void); protected: TransferSyntax * ImageTransferSyntax; void * OrgPixelData; // Formated for .BMP (adjusted for window level and center) UINT32 OrgPixelLength; BOOL IsColor; BOOL bAutoRemoveImage; private: BOOL UpdateSelf (); void ReleaseRawPixelData (); void ReleaseCompPixelData (); protected: BOOL ConvertToCompress (const UID & TrnsynUID); BOOL ConvertToDecompress (void); public: static BOOL AutoWindowLevel_UINT8 (void * PixelData, int Width, int Height, int Depth, int * WindowWidth, int * WindowCenter); static BOOL AutoWindowLevel_INT16 (void * PixelData, int Width, int Height, int Depth, int * WindowWidth, int * WindowCenter); static BOOL AutoWindowLevel_UINT16 (void * PixelData, int Width, int Height, int Depth, int * WindowWidth, int * WindowCenter); friend DICOMImage; }; #endif