00001 /* 00002 * 00003 * Copyright (C) 1997-2005, OFFIS 00004 * 00005 * This software and supporting documentation were developed by 00006 * 00007 * Kuratorium OFFIS e.V. 00008 * Healthcare Information and Communication Systems 00009 * Escherweg 2 00010 * D-26121 Oldenburg, Germany 00011 * 00012 * THIS SOFTWARE IS MADE AVAILABLE, AS IS, AND OFFIS MAKES NO WARRANTY 00013 * REGARDING THE SOFTWARE, ITS PERFORMANCE, ITS MERCHANTABILITY OR 00014 * FITNESS FOR ANY PARTICULAR USE, FREEDOM FROM ANY COMPUTER DISEASES OR 00015 * ITS CONFORMITY TO ANY SPECIFICATION. THE ENTIRE RISK AS TO QUALITY AND 00016 * PERFORMANCE OF THE SOFTWARE IS WITH THE USER. 00017 * 00018 * Module: dcmjpeg 00019 * 00020 * Author: Marco Eichelberg, Norbert Olges 00021 * 00022 * Purpose: abstract codec class for JPEG encoders. 00023 * 00024 * Last Update: $Author: meichel $ 00025 * Update Date: $Date: 2005/12/08 16:59:12 $ 00026 * Source File: $Source: /share/dicom/cvs-depot/dcmtk/dcmjpeg/include/dcmtk/dcmjpeg/djcodece.h,v $ 00027 * CVS/RCS Revision: $Revision: 1.7 $ 00028 * Status: $State: Exp $ 00029 * 00030 * CVS/RCS Log at end of file 00031 * 00032 */ 00033 00034 #ifndef DJCODEC_H 00035 #define DJCODEC_H 00036 00037 #include "dcmtk/config/osconfig.h" 00038 #include "dcmtk/ofstd/oftypes.h" 00039 #include "dcmtk/dcmdata/dccodec.h" /* for class DcmCodec */ 00040 #include "dcmtk/dcmjpeg/djutils.h" /* for enums */ 00041 #include "dcmtk/ofstd/oflist.h" 00042 #include "dcmtk/ofstd/ofstring.h" /* for class OFString */ 00043 00044 class DataInterface; 00045 class DJEncoder; 00046 class DcmDataset; 00047 class DJCodecParameter; 00048 class DJDecoder; 00049 class DcmItem; 00050 class DcmPixelItem; 00051 class DicomImage; 00052 class DcmTagKey; 00053 00054 00062 class DJCodecEncoder : public DcmCodec 00063 { 00064 public: 00065 00067 DJCodecEncoder(); 00068 00070 virtual ~DJCodecEncoder(); 00071 00082 virtual OFCondition decode( 00083 const DcmRepresentationParameter * fromRepParam, 00084 DcmPixelSequence * pixSeq, 00085 DcmPolymorphOBOW& uncompressedPixelData, 00086 const DcmCodecParameter * cp, 00087 const DcmStack& objStack) const; 00088 00103 virtual OFCondition encode( 00104 const Uint16 * pixelData, 00105 const Uint32 length, 00106 const DcmRepresentationParameter * toRepParam, 00107 DcmPixelSequence * & pixSeq, 00108 const DcmCodecParameter *cp, 00109 DcmStack & objStack) const; 00110 00125 virtual OFCondition encode( 00126 const E_TransferSyntax fromRepType, 00127 const DcmRepresentationParameter * fromRepParam, 00128 DcmPixelSequence * fromPixSeq, 00129 const DcmRepresentationParameter * toRepParam, 00130 DcmPixelSequence * & toPixSeq, 00131 const DcmCodecParameter * cp, 00132 DcmStack & objStack) const; 00133 00141 virtual OFBool canChangeCoding( 00142 const E_TransferSyntax oldRepType, 00143 const E_TransferSyntax newRepType) const; 00144 00149 virtual E_TransferSyntax supportedTransferSyntax() const = 0; 00150 00151 protected: 00152 00157 static void appendCompressionRatio(OFString& arg, double ratio); 00158 00170 static OFCondition togglePlanarConfiguration8( 00171 Uint8 *pixelData, 00172 const unsigned long numValues, 00173 const Uint16 samplesPerPixel, 00174 const Uint16 oldPlanarConfig); 00175 00187 static OFCondition togglePlanarConfiguration16( 00188 Uint16 *pixelData, 00189 const unsigned long numValues, 00190 const Uint16 samplesPerPixel, 00191 const Uint16 oldPlanarConfig); 00192 00193 private: 00194 00211 virtual OFCondition encodeColorImage( 00212 OFBool YBRmode, 00213 DcmItem *dataset, 00214 const DcmRepresentationParameter * toRepParam, 00215 DcmPixelSequence * & pixSeq, 00216 const DJCodecParameter *cp, 00217 double& compressionRatio) const; 00218 00232 virtual OFCondition encodeMonochromeImage( 00233 DcmItem *dataset, 00234 const DcmRepresentationParameter * toRepParam, 00235 DcmPixelSequence * & pixSeq, 00236 const DJCodecParameter *cp, 00237 double& compressionRatio) const; 00238 00251 virtual OFCondition encodeTrueLossless( 00252 const DcmRepresentationParameter * toRepParam, 00253 DcmPixelSequence * & pixSeq, 00254 const DcmCodecParameter *cp, 00255 DcmStack & objStack) const; 00256 00264 virtual OFCondition updateLossyCompressionRatio(DcmItem *dataset, double ratio) const; 00265 00276 virtual OFCondition updateDerivationDescription( 00277 DcmItem *dataset, 00278 const DcmRepresentationParameter * toRepParam, 00279 const DJCodecParameter *cp, 00280 Uint8 bitsPerSample, 00281 double ratio) const; 00282 00288 virtual OFCondition adjustOverlays(DcmItem *dataset, DicomImage& image) const; 00289 00294 virtual OFBool isLosslessProcess() const = 0; 00295 00306 virtual void createDerivationDescription( 00307 const DcmRepresentationParameter * toRepParam, 00308 const DJCodecParameter *cp, 00309 Uint8 bitsPerSample, 00310 double ratio, 00311 OFString& derivationDescription) const = 0; 00312 00320 virtual DJEncoder *createEncoderInstance( 00321 const DcmRepresentationParameter * toRepParam, 00322 const DJCodecParameter *cp, 00323 Uint8 bitsPerSample) const = 0; 00324 00333 static OFCondition correctVOIWindows(DcmItem *dataset, double voiOffset, double voiFactor); 00334 00335 OFCondition updatePlanarConfiguration( 00336 DcmItem *item, 00337 const Uint16 newPlanConf) const; 00338 }; 00339 00340 #endif 00341 00342 /* 00343 * CVS/RCS Log 00344 * $Log: djcodece.h,v $ 00345 * Revision 1.7 2005/12/08 16:59:12 meichel 00346 * Changed include path schema for all DCMTK header files 00347 * 00348 * Revision 1.6 2005/12/01 11:13:01 onken 00349 * Minor code modifications for gcc 4 00350 * 00351 * Revision 1.5 2005/11/29 11:00:40 onken 00352 * *** empty log message *** 00353 * 00354 * Revision 1.4 2005/11/29 08:50:34 onken 00355 * Added support for "true" lossless compression in dcmjpeg, that doesn't 00356 * use dcmimage classes, but compresses raw pixel data (8 and 16 bit) to 00357 * avoid losses in quality caused by color space conversions or modality 00358 * transformations etc. 00359 * Corresponding commandline option in dcmcjpeg (new default) 00360 * 00361 * Revision 1.3 2003/07/04 13:26:22 meichel 00362 * Replaced forward declarations for OFString with explicit includes, 00363 * needed when compiling with HAVE_STD_STRING 00364 * 00365 * Revision 1.2 2002/05/24 14:58:04 meichel 00366 * Moved helper methods that are useful for different compression techniques 00367 * from module dcmjpeg to module dcmdata 00368 * 00369 * Revision 1.1 2001/11/13 15:56:16 meichel 00370 * Initial release of module dcmjpeg 00371 * 00372 * 00373 */