DYT/Tool/3rdParty_x64/include/dcmtk/dcmjpeg/djcparam.h
2024-11-22 23:19:31 +08:00

404 lines
13 KiB
C++

/*
*
* Copyright (C) 1997-2014, OFFIS e.V.
* All rights reserved. See COPYRIGHT file for details.
*
* This software and supporting documentation were developed by
*
* OFFIS e.V.
* R&D Division Health
* Escherweg 2
* D-26121 Oldenburg, Germany
*
*
* Module: dcmjpeg
*
* Author: Norbert Olges, Marco Eichelberg
*
* Purpose: codec parameter class for dcmjpeg codecs
*
*/
#ifndef DJCPARAM_H
#define DJCPARAM_H
#include "dcmtk/config/osconfig.h"
#include "dcmtk/dcmdata/dccodec.h" /* for DcmCodecParameter */
#include "dcmtk/dcmjpeg/djutils.h" /* for enums */
/** codec parameter for IJG codecs
*/
class DCMTK_DCMJPEG_EXPORT DJCodecParameter: public DcmCodecParameter
{
public:
/** constructor.
* @param pCompressionCSConversion color conversion mode for compression
* @param pDecompressionCSConversion color conversion mode for decompression
* @param pCreateSOPInstanceUID mode for SOP Instance UID creation
* @param pPlanarConfiguration flag describing how planar configuration of
* decompressed color images should be handled
* @param predictor6WorkaroundEnable enable workaround for buggy lossless compressed images with
* overflow in predictor 6 for images with 16 bits/pixel
* @param pOptimizeHuffman perform huffman table optimization for 8 bits/pixel compression?
* @param pSmoothingFactor smoothing factor for image compression, 0..100
* @param pForcedBitDepth forced bit depth for image compression, 0 (auto) or 8/12/16
* @param pFragmentSize maximum fragment size (in kbytes) for compression, 0 for unlimited.
* @param pCreateOffsetTable create offset table during image compression?
* @param pSampleFactors subsampling mode for color image compression
* @param pWriteYBR422 flag indicating whether a compressed YBR color stream should
* be marked as YBR_FULL or YBR_FULL_422 on DICOM level
* @param pConvertToSC flag indicating whether image should be converted to
* Secondary Capture upon compression
* @param pWindowType mode for VOI transformation of monochrome images
* @param pWindowParameter parameter for VOI transform of monochrome images, used in modes 1, 2, 4, 6
* @param pVoiCenter VOI window center for mode 5
* @param pVoiWidth VOI window width for mode 5
* @param pRoiLeft Region of Interest left corner for for VOI transform of monochrome images, mode 7
* @param pRoiTop Region of Interest upper corner for for VOI transform of monochrome images, mode 7
* @param pRoiWidth Region of Interest width for for VOI transform of monochrome images, mode 7
* @param pRoiHeight Region of Interest height for for VOI transform of monochrome images, mode 7
* @param pUsePixelValues check smallest and largest pixel value and optimize compression, mode 0 only
* @param pUseModalityRescale create Rescale Slope/Intercept to scale back to original pixel range, mode 0 only
* @param pAcceptWrongPaletteTags accept wrong palette attribute tags (only "pseudo lossless" encoder)
* @param pAcrNemaCompatibility accept old ACR-NEMA images without photometric interpretation
* (only "pseudo" lossless encoder)
* @param pTrueLosslessMode Enables true lossless compression (replaces old "pseudo lossless" encoder)
*/
DJCodecParameter(
E_CompressionColorSpaceConversion pCompressionCSConversion,
E_DecompressionColorSpaceConversion pDecompressionCSConversion,
E_UIDCreation pCreateSOPInstanceUID,
E_PlanarConfiguration pPlanarConfiguration,
OFBool predictor6WorkaroundEnable = OFFalse,
OFBool pOptimizeHuffman = OFFalse,
int pSmoothingFactor = 0,
int pForcedBitDepth = 0,
Uint32 pFragmentSize = 0,
OFBool pCreateOffsetTable = OFTrue,
E_SubSampling pSampleFactors = ESS_444,
OFBool pWriteYBR422 = OFFalse,
OFBool pConvertToSC = OFFalse,
size_t pWindowType = 0,
size_t pWindowParameter = 0,
double pVoiCenter = 0.0,
double pVoiWidth = 0.0,
size_t pRoiLeft = 0,
size_t pRoiTop = 0,
size_t pRoiWidth = 0,
size_t pRoiHeight = 0,
OFBool pUsePixelValues = OFTrue,
OFBool pUseModalityRescale = OFFalse,
OFBool pAcceptWrongPaletteTags = OFFalse,
OFBool pAcrNemaCompatibility = OFFalse,
OFBool pTrueLosslessMode = OFTrue);
/// copy constructor
DJCodecParameter(const DJCodecParameter& arg);
/// destructor
virtual ~DJCodecParameter();
/** this methods creates a copy of type DcmCodecParameter *
* it must be overweritten in every subclass.
* @return copy of this object
*/
virtual DcmCodecParameter *clone() const;
/** returns the class name as string.
* can be used as poor man's RTTI replacement.
*/
virtual const char *className() const;
/** returns huffman table optimization flag for 8 bits/pixel compression
* @return huffman table optimization flag for 8 bits/pixel compression
*/
OFBool getOptimizeHuffmanCoding() const
{
return optimizeHuffman;
}
/** returns smoothing factor for image compression, 0..100
* @return smoothing factor for image compression, 0..100
*/
int getSmoothingFactor() const
{
return smoothingFactor;
}
/** returns forced bit depth for image compression, 0 (auto) or 8/12/16
* @return forced bit depth for image compression
*/
int getForcedBitDepth() const
{
return forcedBitDepth;
}
/** returns maximum fragment size (in kbytes) for compression, 0 for unlimited.
* @returnmaximum fragment size for compression
*/
Uint32 getFragmentSize() const
{
return fragmentSize;
}
/** returns offset table creation flag
* @return offset table creation flag
*/
OFBool getCreateOffsetTable() const
{
return createOffsetTable;
}
/** returns subsampling mode for color image compression
* @return subsampling mode for color image compression
*/
E_SubSampling getSampleFactors() const
{
return sampleFactors;
}
/** returns flag indicating whether a compressed YBR color stream should be marked
* as YBR_FULL or YBR_FULL_422 on DICOM level
* @return YBR422 flag
*/
OFBool getWriteYBR422() const
{
return writeYBR422;
}
/** returns secondary capture conversion flag
* @return secondary capture conversion flag
*/
OFBool getConvertToSC() const
{
return convertToSC;
}
/** returns mode for SOP Instance UID creation
* @return mode for SOP Instance UID creation
*/
E_UIDCreation getUIDCreation() const
{
return uidCreation;
}
/** returns mode for VOI transformation of monochrome images.
* @return mode for VOI transformation of monochrome images
*/
size_t getWindowType() const
{
return windowType;
}
/** returns parameter for VOI transform of monochrome images, used in VOI modes 1, 2, 4, 6
* @return parameter for VOI transform of monochrome images, used in VOI modes 1, 2, 4, 6
*/
size_t getWindowParameter() const
{
return windowParameter;
}
/** returns VOI window center and width for VOI mode 5
* @param center VOI center returned in this parameter
* @param width VOI width returned in this parameter
*/
void getVOIWindow(double& center, double& width) const
{
center = voiCenter;
width = voiWidth;
}
/** returns ROI coordinates for VOI mode 7
* @param left_pos ROI left edge returned in this parameter
* @param top_pos ROI top edge returned in this parameter
* @param width ROI width returned in this parameter
* @param height ROI height returned in this parameter
*/
void getROI(
size_t& left_pos,
size_t& top_pos,
size_t& width,
size_t& height) const
{
left_pos = roiLeft;
top_pos = roiTop;
width = roiWidth;
height = roiHeight;
}
/** returns planar configuration flag
* @return planar configuration flag
*/
E_PlanarConfiguration getPlanarConfiguration() const
{
return planarConfiguration;
}
/** returns color conversion mode for compression
* @return color conversion mode for compression
*/
E_CompressionColorSpaceConversion getCompressionColorSpaceConversion() const
{
return compressionCSConversion;
}
/** returns color conversion mode for compression
* @return color conversion mode for compression
*/
E_DecompressionColorSpaceConversion getDecompressionColorSpaceConversion() const
{
return decompressionCSConversion;
}
/** returns flag indicating if compression to be optimized for real pixel values
* @return flag indicating if compression to be optimized for real pixel values
*/
OFBool getUsePixelValues() const
{
return usePixelValues;
}
/** returns flag indicating if compression should compute Rescale Slope/Intercept
* @return flag indicating if compression should compute Rescale Slope/Intercept
*/
OFBool getUseModalityRescale() const
{
return useModalityRescale;
}
/** Returns flag indicating if incorrect palette attribute tags should be accepted
* @return flag indicating if incorrect palette attribute tags should be accepted
*/
OFBool getAcceptWrongPaletteTags() const
{
return acceptWrongPaletteTags;
}
/** Returns flag indicating if compatibility to old ACR-NEMA images without
* photometric interpretation is enabled.
* @return flag indicating if ACR-NEMA compatibility is enabled
*/
OFBool getAcrNemaCompatibility() const
{
return acrNemaCompatibility;
}
/** returns flag indicating if real lossless mode is enabled
* @return flag indicating if real lossless mode is enabled
*/
OFBool getTrueLosslessMode() const
{
return trueLosslessMode;
}
/** returns flag indicating whether the workaround for buggy JPEG lossless images with incorrect predictor 6 is enabled
* @return flag indicating whether the workaround for buggy JPEG lossless images with incorrect predictor 6 is enabled
*/
OFBool predictor6WorkaroundEnabled() const
{
return predictor6WorkaroundEnabled_;
}
private:
/// private undefined copy assignment operator
DJCodecParameter& operator=(const DJCodecParameter&);
/// color conversion mode for compression
E_CompressionColorSpaceConversion compressionCSConversion;
/// color conversion mode for decompression
E_DecompressionColorSpaceConversion decompressionCSConversion;
/// flag describing how planar configuration of decompressed color images should be handled
E_PlanarConfiguration planarConfiguration;
/// perform huffman table optimization for 8 bits/pixel compression?
OFBool optimizeHuffman;
/// smoothing factor for image compression, 0..100
int smoothingFactor;
/// forced bit depth for image compression, 0 (auto) or 8/12/16
int forcedBitDepth;
/// maximum fragment size (in kbytes) for compression, 0 for unlimited.
Uint32 fragmentSize;
/// create offset table during image compression
OFBool createOffsetTable;
/// subsampling mode for color image compression
E_SubSampling sampleFactors;
/** flag indicating whether a compressed YBR color stream should be marked
* as YBR_FULL or YBR_FULL_422 on DICOM level
*/
OFBool writeYBR422;
/// flag indicating whether image should be converted to Secondary Capture upon compression
OFBool convertToSC;
/// mode for SOP Instance UID creation
E_UIDCreation uidCreation;
/** mode for VOI transformation of monochrome images. possible values:
0: no VOI transformation (default). See also variables
usePixelValues (default) or useModalityRescale denoting two
further variables tweaking compression behaviour.
1: use the n-th VOI window from the image file (see variable windowType)
2: use the n-th VOI look up table from the image file (see variable windowType)
3: compute VOI window using min-max algorithm
4: compute VOI window using Histogram algorithm, ignoring n percent
5: compute VOI window using center r and width s
6: compute VOI window using min-max algorithm ignoring extremes
7: compute region of interest VOI window
*/
size_t windowType;
/// parameter for VOI transform of monochrome images, used in modes 1, 2, 4, 6
size_t windowParameter;
/// VOI window center for mode 5
double voiCenter;
/// VOI window width for mode 5
double voiWidth;
/// Region of Interest left corner for for VOI transform of monochrome images, mode 7
size_t roiLeft;
/// Region of Interest upper corner for for VOI transform of monochrome images, mode 7
size_t roiTop;
/// Region of Interest width for for VOI transform of monochrome images, mode 7
size_t roiWidth;
/// Region of Interest height for for VOI transform of monochrome images, mode 7
size_t roiHeight;
/// Check smallest and largest pixel value and optimize compression, mode 0 only
OFBool usePixelValues;
/// Create Rescale Slope/Intercept to scale back to original pixel range, mode 0 only
OFBool useModalityRescale;
/// Accept wrong palette attribute tags
OFBool acceptWrongPaletteTags;
/// Compatibility with old ACR-NEMA images without photometric interpretation
OFBool acrNemaCompatibility;
/// True losless mode, replaces old "pseudo" lossless encoders, when true (default)
OFBool trueLosslessMode;
/// flag indicating that the workaround for buggy JPEG lossless images with incorrect predictor 6 is enabled
OFBool predictor6WorkaroundEnabled_;
};
#endif