00001 /* 00002 * 00003 * Copyright (C) 1996-2010, OFFIS e.V. 00004 * All rights reserved. See COPYRIGHT file for details. 00005 * 00006 * This software and supporting documentation were developed by 00007 * 00008 * OFFIS e.V. 00009 * R&D Division Health 00010 * Escherweg 2 00011 * D-26121 Oldenburg, Germany 00012 * 00013 * 00014 * Module: dcmimgle 00015 * 00016 * Author: Joerg Riesmeier 00017 * 00018 * Purpose: DicomMonochromeImage (Header) 00019 * 00020 * Last Update: $Author: joergr $ 00021 * Update Date: $Date: 2010-10-14 13:16:26 $ 00022 * CVS/RCS Revision: $Revision: 1.57 $ 00023 * Status: $State: Exp $ 00024 * 00025 * CVS/RCS Log at end of file 00026 * 00027 */ 00028 00029 00030 #ifndef DIMOIMG_H 00031 #define DIMOIMG_H 00032 00033 #include "dcmtk/config/osconfig.h" 00034 00035 #include "dcmtk/ofstd/ofcast.h" 00036 00037 #include "dcmtk/dcmimgle/diimage.h" 00038 #include "dcmtk/dcmimgle/dimopx.h" 00039 #include "dcmtk/dcmimgle/dimoopx.h" 00040 #include "dcmtk/dcmimgle/didispfn.h" 00041 00042 00043 /*------------------------* 00044 * forward declarations * 00045 *------------------------*/ 00046 00047 class DiColorImage; 00048 00049 00050 /*---------------------* 00051 * class declaration * 00052 *---------------------*/ 00053 00056 class DiMonoImage 00057 : public DiImage 00058 { 00059 00060 public: 00061 00067 DiMonoImage(const DiDocument *docu, 00068 const EI_Status status); 00069 00077 DiMonoImage(const DiDocument *docu, 00078 const EI_Status status, 00079 const double slope, 00080 const double intercept); 00081 00090 DiMonoImage(const DiDocument *docu, 00091 const EI_Status status, 00092 const DcmUnsignedShort &data, 00093 const DcmUnsignedShort &descriptor, 00094 const DcmLongString *explanation); 00095 00098 virtual ~DiMonoImage(); 00099 00106 virtual int processNextFrames(const unsigned long fcount); 00107 00119 int getMinMaxValues(double &min, 00120 double &max, 00121 const int mode) const; 00122 00127 DiDisplayFunction *getDisplayFunction() const 00128 { 00129 return DisplayFunction; 00130 } 00131 00138 int setDisplayFunction(DiDisplayFunction *display); 00139 00147 int setNoDisplayFunction(); 00148 00156 int setNoVoiTransformation(); 00157 00164 inline int deleteDisplayLUT(const int bits) 00165 { 00166 return (DisplayFunction != NULL) ? DisplayFunction->deleteLookupTable(bits) : 0; 00167 } 00168 00175 inline int isValueUnused(const unsigned long value) 00176 { 00177 return (OutputData != NULL) ? OutputData->isUnused(value) : 0; 00178 } 00179 00191 int convertPValueToDDL(const Uint16 pvalue, 00192 Uint16 &ddl, 00193 const int bits); 00194 00204 int setMinMaxWindow(const int idx = 1); 00205 00220 int setRoiWindow(const unsigned long left_pos, 00221 const unsigned long top_pos, 00222 const unsigned long width, 00223 const unsigned long height, 00224 const unsigned long frame); 00225 00233 int setHistogramWindow(const double thresh); 00234 00242 int setWindow(const unsigned long pos = 0); 00243 00255 int setWindow(const double center, 00256 const double width, 00257 const char *explanation = NULL); 00258 00266 int getWindow(double ¢er, 00267 double &width); 00268 00273 inline unsigned long getWindowCount() const 00274 { 00275 return WindowCount; 00276 } 00277 00283 EF_VoiLutFunction getVoiLutFunction() const; 00284 00294 int setVoiLutFunction(const EF_VoiLutFunction function); 00295 00306 int setVoiLut(const DcmUnsignedShort &data, 00307 const DcmUnsignedShort &descriptor, 00308 const DcmLongString *explanation, 00309 const EL_BitsPerTableEntry descripMode = ELM_UseValue); 00310 00319 int setVoiLut(const unsigned long pos, 00320 const EL_BitsPerTableEntry descripMode = ELM_UseValue); 00321 00326 inline unsigned long getVoiLutCount() const 00327 { 00328 return VoiLutCount; 00329 } 00330 00335 inline const char *getVoiTransformationExplanation() const 00336 { 00337 return VoiExplanation.c_str(); 00338 } 00339 00347 const char *getVoiWindowExplanation(const unsigned long pos, 00348 OFString &explanation) const; 00349 00357 const char *getVoiLutExplanation(const unsigned long pos, 00358 OFString &explanation) const; 00359 00364 inline const char *getModalityLutExplanation() const 00365 { 00366 return (InterData != NULL) ? InterData->getModalityLutExplanation() : OFstatic_cast(const char *, NULL); 00367 } 00368 00380 int setHardcopyParameters(const unsigned int min, 00381 const unsigned int max, 00382 const unsigned int reflect, 00383 const unsigned int illumin); 00384 00391 ES_PresentationLut getPresentationLutShape() const; 00392 00404 int setPresentationLutShape(const ES_PresentationLut shape); 00405 00416 int setPresentationLut(const DcmUnsignedShort &data, 00417 const DcmUnsignedShort &descriptor, 00418 const DcmLongString *explanation = NULL, 00419 const EL_BitsPerTableEntry descripMode = ELM_UseValue); 00420 00431 int setInversePresentationLut(const DcmUnsignedShort &data, 00432 const DcmUnsignedShort &descriptor, 00433 const EL_BitsPerTableEntry descripMode = ELM_UseValue); 00434 00439 inline const char *getPresentationLutExplanation() const 00440 { 00441 return (PresLutData != NULL) ? PresLutData->getExplanation() : OFstatic_cast(const char *, NULL); 00442 } 00443 00460 int addOverlay(const unsigned int group, 00461 const signed int left_pos, 00462 const signed int top_pos, 00463 const unsigned int columns, 00464 const unsigned int rows, 00465 const DcmOverlayData &data, 00466 const DcmLongString &label, 00467 const DcmLongString &description, 00468 const EM_Overlay mode); 00469 00474 int removeAllOverlays(); 00475 00482 inline DiOverlay *getOverlayPtr(const unsigned int idx) 00483 { 00484 return (idx < 2) ? Overlays[idx] : OFstatic_cast(DiOverlay *, NULL); 00485 } 00486 00491 inline DiMonoImage *getMonoImagePtr() 00492 { 00493 return this; 00494 } 00495 00505 int flip(const int horz, 00506 const int vert); 00507 00516 int rotate(const int degree); 00517 00528 virtual int getBits(const int bits = 0) const 00529 { 00530 return (((bits < 1) || (bits > MAX_BITS)) && (bits != MI_PastelColor)) ? BitsPerSample : bits; 00531 } 00532 00539 virtual unsigned long getOutputDataSize(const int bits = 0) const; 00540 00550 virtual const void *getOutputData(const unsigned long frame, 00551 const int bits, 00552 const int planar = 0) = 0; 00553 00565 virtual int getOutputData(void *buffer, 00566 const unsigned long size, 00567 const unsigned long frame, 00568 const int bits, 00569 const int planar = 0) = 0; 00570 00578 const void *getOutputPlane(const int dummy) const; 00579 00583 void deleteOutputData(); 00584 00602 const void *getOverlayData(const unsigned long frame, 00603 const unsigned int plane, 00604 unsigned int &left_pos, 00605 unsigned int &top_pos, 00606 unsigned int &width, 00607 unsigned int &height, 00608 EM_Overlay &mode, 00609 const unsigned int idx, 00610 const int bits = 8, 00611 const Uint16 fore = 0xff, 00612 const Uint16 back = 0x0); 00613 00628 const void *getFullOverlayData(const unsigned long frame, 00629 const unsigned int plane, 00630 unsigned int &width, 00631 unsigned int &height, 00632 const unsigned int idx, 00633 const int bits = 8, 00634 const Uint16 fore = 0xff, 00635 const Uint16 back = 0x0); 00636 00640 void deleteOverlayData(); 00641 00658 unsigned long create6xxx3000OverlayData(Uint8 *&buffer, 00659 const unsigned int plane, 00660 unsigned int &width, 00661 unsigned int &height, 00662 unsigned long &frames, 00663 const unsigned int idx = 0); 00664 00669 const DiPixel *getInterData() const 00670 { 00671 return InterData; 00672 } 00673 00678 const DiMonoPixel *getMonoInterData() const 00679 { 00680 return InterData; 00681 } 00682 00695 unsigned long createDIB(void *&data, 00696 const unsigned long size, 00697 const unsigned long frame, 00698 const int bits, 00699 const int upsideDown, 00700 const int padding = 1); 00701 00711 unsigned long createAWTBitmap(void *&data, 00712 const unsigned long frame, 00713 const int bits); 00714 00726 static void *createPackedBitmap(const void *buffer, 00727 const unsigned long size, 00728 const unsigned long count, 00729 const int alloc, 00730 const int stored); 00731 00740 DiImage *createOutputImage(const unsigned long frame, 00741 const int bits); 00742 00752 int writeImageToDataset(DcmItem &dataset, 00753 const int mode, 00754 const int planar); 00755 00765 int writePPM(STD_NAMESPACE ostream& stream, 00766 const unsigned long frame, 00767 const int bits); 00768 00778 int writePPM(FILE *stream, 00779 const unsigned long frame, 00780 const int bits); 00781 00790 int writeRawPPM(FILE *stream, 00791 const unsigned long frame, 00792 const int bits); 00793 00802 int writeBMP(FILE *stream, 00803 const unsigned long frame, 00804 const int bits); 00805 00806 00807 protected: 00808 00815 DiMonoImage(const DiDocument *image, 00816 const EI_Status status, 00817 const char dummy); 00818 00825 DiMonoImage(const DiMonoImage *image, 00826 const unsigned long fstart, 00827 const unsigned long fcount); 00828 00838 DiMonoImage(const DiColorImage *image, 00839 const double red, 00840 const double green, 00841 const double blue); 00842 00862 DiMonoImage(const DiMonoImage *image, 00863 const signed long left_pos, 00864 const signed long top_pos, 00865 const Uint16 src_cols, 00866 const Uint16 src_rows, 00867 const Uint16 dest_cols, 00868 const Uint16 dest_rows, 00869 const int interpolate, 00870 const int aspect, 00871 const Uint16 pvalue); 00872 00879 DiMonoImage(const DiMonoImage *image, 00880 const int horz, 00881 const int vert); 00882 00888 DiMonoImage(const DiMonoImage *image, 00889 const int degree); 00890 00899 DiMonoImage(const DiMonoImage *image, 00900 DiMonoOutputPixel *pixel, 00901 const unsigned long frame, 00902 const int stored, 00903 const int alloc); 00904 00910 void Init(DiMonoModality *modality, 00911 const OFBool reuse = OFFalse); 00912 00917 void InitUint8(DiMonoModality *modality); 00918 00923 void InitSint8(DiMonoModality *modality); 00924 00929 void InitUint16(DiMonoModality *modality); 00930 00935 void InitSint16(DiMonoModality *modality); 00936 00941 void InitUint32(DiMonoModality *modality); 00942 00947 void InitSint32(DiMonoModality *modality); 00948 00953 int checkInterData(const int mode = 1); 00954 00962 virtual void updateImagePixelModuleAttributes(DcmItem &dataset); 00963 00976 const void *getData(void *buffer, 00977 const unsigned long size, 00978 const unsigned long frame, 00979 int bits, 00980 const int planar, 00981 const int negative); 00982 00994 void getDataUint8(void *buffer, 00995 DiDisplayFunction *disp, 00996 const int samples, 00997 const unsigned long frame, 00998 const int bits, 00999 const Uint32 low, 01000 const Uint32 high); 01001 01013 void getDataSint8(void *buffer, 01014 DiDisplayFunction *disp, 01015 const int samples, 01016 const unsigned long frame, 01017 const int bits, 01018 const Uint32 low, 01019 const Uint32 high); 01020 01032 void getDataUint16(void *buffer, 01033 DiDisplayFunction *disp, 01034 const int samples, 01035 const unsigned long frame, 01036 const int bits, 01037 const Uint32 low, 01038 const Uint32 high); 01039 01051 void getDataSint16(void *buffer, 01052 DiDisplayFunction *disp, 01053 const int samples, 01054 const unsigned long frame, 01055 const int bits, 01056 const Uint32 low, 01057 const Uint32 high); 01058 01070 void getDataUint32(void *buffer, 01071 DiDisplayFunction *disp, 01072 const int samples, 01073 const unsigned long frame, 01074 const int bits, 01075 const Uint32 low, 01076 const Uint32 high); 01077 01089 void getDataSint32(void *buffer, 01090 DiDisplayFunction *disp, 01091 const int samples, 01092 const unsigned long frame, 01093 const int bits, 01094 const Uint32 low, 01095 const Uint32 high); 01096 01105 int createLinODPresentationLut(const unsigned long count, const int bits); 01106 01108 double WindowCenter; 01110 double WindowWidth; 01112 unsigned long WindowCount; 01114 unsigned long VoiLutCount; 01115 01117 int ValidWindow; 01118 01120 OFString VoiExplanation; 01122 EF_VoiLutFunction VoiLutFunction; 01124 ES_PresentationLut PresLutShape; 01125 01127 unsigned int MinDensity; 01129 unsigned int MaxDensity; 01131 unsigned int Reflection; 01133 unsigned int Illumination; 01134 01136 DiOverlay *Overlays[2]; 01138 DiLookupTable *VoiLutData; 01140 DiLookupTable *PresLutData; 01142 DiMonoPixel *InterData; 01143 01145 DiDisplayFunction *DisplayFunction; 01146 01147 01148 private: 01149 01151 DiMonoOutputPixel *OutputData; 01153 void *OverlayData; 01154 01155 // --- declarations to avoid compiler warnings 01156 01157 DiMonoImage(const DiMonoImage &); 01158 DiMonoImage &operator=(const DiMonoImage &); 01159 }; 01160 01161 01162 #endif 01163 01164 01165 /* 01166 * 01167 * CVS/RCS Log: 01168 * $Log: dimoimg.h,v $ 01169 * Revision 1.57 2010-10-14 13:16:26 joergr 01170 * Updated copyright header. Added reference to COPYRIGHT file. 01171 * 01172 * Revision 1.56 2010-10-05 15:24:02 joergr 01173 * Added preliminary support for VOI LUT function. Please note, however, that 01174 * the sigmoid transformation is not yet implemented. 01175 * 01176 * Revision 1.55 2010-07-21 13:08:56 joergr 01177 * Fixed memory leak when using processNextFrames(): DiOverlay object was 01178 * created multiple times. 01179 * 01180 * Revision 1.54 2010-03-01 09:08:47 uli 01181 * Removed some unnecessary include directives in the headers. 01182 * 01183 * Revision 1.53 2009-11-25 16:06:14 joergr 01184 * Adapted code for new approach to access individual frames of a DICOM image. 01185 * 01186 * Revision 1.52 2008-11-18 11:01:28 joergr 01187 * Fixed issue with incorrectly encoded overlay planes (wrong values for 01188 * OverlayBitsAllocated and OverlayBitPosition). 01189 * 01190 * Revision 1.51 2008-05-20 10:03:53 joergr 01191 * Added new bilinear and bicubic scaling algorithms for image magnification. 01192 * 01193 * Revision 1.50 2008-05-13 09:54:40 joergr 01194 * Added new parameter to writeImageToDataset() in order to affect the planar 01195 * configuration of the output image/dataset. Changed behaviour: By default, 01196 * the output now uses the same planar configuration as the "original" image 01197 * (previously: always color-by-plane). 01198 * 01199 * Revision 1.49 2007/03/16 11:56:06 joergr 01200 * Introduced new flag that allows to select how to handle the BitsPerTableEntry 01201 * value in the LUT descriptor (use, ignore or check). 01202 * 01203 * Revision 1.48 2006/08/15 16:30:11 meichel 01204 * Updated the code in module dcmimgle to correctly compile when 01205 * all standard C++ classes remain in namespace std. 01206 * 01207 * Revision 1.47 2006/07/10 10:52:27 joergr 01208 * Added support for 32-bit BMP images. 01209 * 01210 * Revision 1.46 2005/12/08 16:47:50 meichel 01211 * Changed include path schema for all DCMTK header files 01212 * 01213 * Revision 1.45 2005/03/09 17:33:16 joergr 01214 * Added mode to writeImageToDataset() which allows the value of BitsStored to 01215 * be determined either from 'used' or from 'possible' pixel values. 01216 * 01217 * Revision 1.44 2004/07/20 18:12:16 joergr 01218 * Added API method to "officially" access the internal intermediate pixel data 01219 * representation (e.g. to get Hounsfield Units for CT images). 01220 * 01221 * Revision 1.43 2004/02/06 11:07:50 joergr 01222 * Distinguish more clearly between const and non-const access to pixel data. 01223 * 01224 * Revision 1.42 2003/12/23 10:51:52 joergr 01225 * Updated documentation to get rid of doxygen warnings. 01226 * 01227 * Revision 1.41 2003/12/17 16:17:29 joergr 01228 * Added new compatibility flag that allows to ignore the third value of LUT 01229 * descriptors and to determine the bits per table entry automatically. 01230 * 01231 * Revision 1.40 2003/12/08 18:30:16 joergr 01232 * Adapted type casts to new-style typecast operators defined in ofcast.h. 01233 * Removed leading underscore characters from preprocessor symbols (reserved 01234 * symbols). Updated CVS header. 01235 * 01236 * Revision 1.39 2003/06/12 15:08:34 joergr 01237 * Fixed inconsistent API documentation reported by Doxygen. 01238 * 01239 * Revision 1.38 2003/05/20 09:20:21 joergr 01240 * Added method returning the number of bytes required to store a single 01241 * rendered frame: getOutputDataSize(). 01242 * 01243 * Revision 1.37 2002/12/09 13:32:52 joergr 01244 * Renamed parameter/local variable to avoid name clashes with global 01245 * declaration left and/or right (used for as iostream manipulators). 01246 * 01247 * Revision 1.36 2002/08/02 15:03:53 joergr 01248 * Added function to write the current image (not only a selected frame) to a 01249 * DICOM dataset. 01250 * 01251 * Revision 1.35 2002/06/26 17:20:04 joergr 01252 * Removed superfluous "inline" method specifyer (MSVC6 linker reported an 01253 * error). 01254 * 01255 * Revision 1.34 2002/06/26 16:04:44 joergr 01256 * Added support for polarity flag to color images. 01257 * Added new methods to get the explanation string of stored VOI windows and 01258 * LUTs (not only of the currently selected VOI transformation). 01259 * 01260 * Revision 1.33 2002/01/29 17:05:50 joergr 01261 * Added optional flag to the "Windows DIB" methods allowing to switch off the 01262 * scanline padding. 01263 * 01264 * Revision 1.32 2001/11/19 12:55:54 joergr 01265 * Added parameter 'frame' to setRoiWindow(). 01266 * 01267 * Revision 1.31 2001/11/09 16:27:34 joergr 01268 * Added support for Window BMP file format. 01269 * Enhanced and renamed createTrueColorDIB() method. 01270 * 01271 * Revision 1.30 2001/09/28 13:06:10 joergr 01272 * Added routines to get the currently active Polarity and PresentationLUTShape. 01273 * Added method setRoiWindow() which automatically calculates a min-max VOI 01274 * window for a specified rectangular region of the image. 01275 * Added method to extract embedded overlay planes from pixel data and store 01276 * them in group (6xxx,3000) format. 01277 * 01278 * Revision 1.29 2001/06/01 15:49:44 meichel 01279 * Updated copyright header 01280 * 01281 * Revision 1.28 2001/05/14 09:49:17 joergr 01282 * Added support for "1 bit output" of overlay planes; useful to extract 01283 * overlay planes from the pixel data and store them separately in the dataset. 01284 * 01285 * Revision 1.27 2000/07/07 13:42:30 joergr 01286 * Added support for LIN OD presentation LUT shape. 01287 * 01288 * Revision 1.26 2000/06/07 14:30:27 joergr 01289 * Added method to set the image polarity (normal, reverse). 01290 * 01291 * Revision 1.25 2000/03/08 16:24:18 meichel 01292 * Updated copyright header. 01293 * 01294 * Revision 1.24 1999/12/09 17:26:24 joergr 01295 * Split source file dimoimg.cc into 4 parts to avoid compiler problems 01296 * with gcc and additional optimization options. 01297 * 01298 * Revision 1.23 1999/10/20 10:33:15 joergr 01299 * Enhanced method getOverlayData to support 12 bit data for print. 01300 * 01301 * Revision 1.22 1999/10/06 13:38:46 joergr 01302 * Corrected creation of PrintBitmap pixel data: VOI windows should be applied 01303 * before clipping to avoid that the region outside the image (border) is also 01304 * windowed (this requires a new method in dcmimgle to create a DicomImage 01305 * with the grayscale transformations already applied). 01306 * 01307 * Revision 1.21 1999/09/17 12:24:47 joergr 01308 * Added/changed/completed DOC++ style comments in the header files. 01309 * 01310 * Revision 1.20 1999/09/10 08:45:18 joergr 01311 * Added support for CIELAB display function. 01312 * 01313 * Revision 1.19 1999/08/25 16:41:52 joergr 01314 * Added new feature: Allow clipping region to be outside the image 01315 * (overlapping). 01316 * 01317 * Revision 1.18 1999/07/23 14:03:05 joergr 01318 * Added dummy method (no implementation yet) to create inverse LUTs. 01319 * Added method to create 12 bit packed bitmap data (used for grayscale print 01320 * storage). 01321 * Added method to return pointer to currently used display function. 01322 * 01323 * Revision 1.17 1999/04/28 17:03:47 joergr 01324 * Added type casts to NULL pointers returned as 'const char *' to avoid 01325 * compiler warnings reported by gcc 2.7.2.1 (Linux). 01326 * 01327 * Revision 1.16 1999/04/28 14:49:54 joergr 01328 * Added experimental support to create grayscale images with more than 256 01329 * shades of gray to be displayed on a consumer monitor (use pastel colors). 01330 * 01331 * Revision 1.15 1999/03/24 17:20:09 joergr 01332 * Added/Modified comments and formatting. 01333 * 01334 * Revision 1.14 1999/03/22 08:51:39 joergr 01335 * Added parameter to specify (transparent) background color for method 01336 * getOverlayData(). 01337 * 01338 * Revision 1.13 1999/02/11 16:34:36 joergr 01339 * Added routine to check whether particular grayscale values are unused in 01340 * the output data. 01341 * 01342 * Revision 1.12 1999/02/08 12:39:05 joergr 01343 * Changed implementation of removeAllOverlays(). 01344 * 01345 * Revision 1.11 1999/02/05 16:43:13 joergr 01346 * Added optional parameter to method convertPValueToDDL to specify width 01347 * of output data (number of bits). 01348 * 01349 * Revision 1.10 1999/02/03 17:27:58 joergr 01350 * Added support for calibration according to Barten transformation (incl. 01351 * a DISPLAY file describing the monitor characteristic). 01352 * 01353 * Revision 1.9 1999/01/20 15:03:40 joergr 01354 * Added new output method to fill external memory buffer with rendered pixel 01355 * data. 01356 * 01357 * Revision 1.8 1999/01/11 09:35:10 joergr 01358 * Added parameter to method 'getMinMaxValues()' to return absolute minimum 01359 * and maximum values ('possible') in addition to actually 'used' pixel 01360 * values. 01361 * 01362 * Revision 1.7 1998/12/23 13:21:28 joergr 01363 * Changed parameter type (long to int) to avoid warning reported by MSVC5. 01364 * 01365 * Revision 1.6 1998/12/23 12:38:16 joergr 01366 * Corrected some typos and formatting. 01367 * 01368 * Revision 1.4 1998/12/22 14:26:19 joergr 01369 * Added new parameters to method addOverlay(). 01370 * 01371 * Revision 1.3 1998/12/16 16:34:06 joergr 01372 * Added explanation string to LUT class (retrieved from dataset). 01373 * Added explanation string for VOI transformations. 01374 * Renamed 'setNoVoiLutTransformation' method ('Voi' instead of 'VOI'). 01375 * Removed several methods used for monochrome images only in base class 01376 * 'DiImage'. Introduced mechanism to use the methods directly. 01377 * 01378 * Revision 1.2 1998/12/14 17:20:03 joergr 01379 * Added methods to add and remove additional overlay planes (still untested). 01380 * 01381 * Revision 1.1 1998/11/27 15:20:57 joergr 01382 * Added copyright message. 01383 * Added methods and constructors for flipping and rotating, changed for 01384 * scaling and clipping. 01385 * Added method to directly create java AWT bitmaps. 01386 * Added constructors to use external modality transformations. 01387 * Added methods to support presentation LUTs and shapes. 01388 * 01389 * Revision 1.6 1998/07/01 08:39:22 joergr 01390 * Minor changes to avoid compiler warnings (gcc 2.8.1 with additional 01391 * options), e.g. add copy constructors. 01392 * 01393 * Revision 1.5 1998/05/11 14:53:20 joergr 01394 * Added CVS/RCS header to each file. 01395 * 01396 * 01397 */