00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
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"
00040 #include "dcmtk/dcmjpeg/djutils.h"
00041 #include "dcmtk/ofstd/oflist.h"
00042 #include "dcmtk/ofstd/ofstring.h"
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
00344
00345
00346
00347
00348
00349
00350
00351
00352
00353
00354
00355
00356
00357
00358
00359
00360
00361
00362
00363
00364
00365
00366
00367
00368
00369
00370
00371
00372
00373