djcodece.h

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  */


Generated on 20 Dec 2005 for OFFIS DCMTK Version 3.5.4 by Doxygen 1.4.5