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

224 lines
6.3 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: enumerations, error constants and helper functions for dcmjpeg
*
*/
#ifndef DJUTILS_H
#define DJUTILS_H
#include "dcmtk/config/osconfig.h"
#include "dcmtk/ofstd/ofcond.h" /* for class OFCondition */
#include "dcmtk/dcmimgle/diutils.h" /* for EP_Interpretation */
#include "dcmtk/oflog/oflog.h"
#include "dcmtk/dcmjpeg/djdefine.h"
// global definitions for logging mechanism provided by the oflog module
extern DCMTK_DCMJPEG_EXPORT OFLogger DCM_dcmjpegLogger;
#define DCMJPEG_TRACE(msg) OFLOG_TRACE(DCM_dcmjpegLogger, msg)
#define DCMJPEG_DEBUG(msg) OFLOG_DEBUG(DCM_dcmjpegLogger, msg)
#define DCMJPEG_INFO(msg) OFLOG_INFO(DCM_dcmjpegLogger, msg)
#define DCMJPEG_WARN(msg) OFLOG_WARN(DCM_dcmjpegLogger, msg)
#define DCMJPEG_ERROR(msg) OFLOG_ERROR(DCM_dcmjpegLogger, msg)
#define DCMJPEG_FATAL(msg) OFLOG_FATAL(DCM_dcmjpegLogger, msg)
// include this file in doxygen documentation
/** @file djutils.h
* @brief enumerations, error constants and helper functions for the dcmjpeg module
*/
// forward declarations
class DcmItem;
/** describes the different modes of operation of a JPEG codec
*/
enum EJ_Mode
{
/// JPEG baseline
EJM_baseline,
/// JPEG extended sequential
EJM_sequential,
/// JPEG spectral selection
EJM_spectralSelection,
/// JPEG full progression
EJM_progressive,
/// JPEG lossless
EJM_lossless
};
/** describes the different types of component sub-sampling
* to be used with lossy image compression.
*/
enum E_SubSampling
{
/// 4:4:4 sampling (no subsampling)
ESS_444,
/// 4:2:2 sampling (horizontal subsampling of chroma components)
ESS_422,
/// 4:1:1 sampling (horizontal and vertical subsampling of chroma components)
ESS_411
};
/** describes the condition under which a compressed or decompressed image
* receives a new SOP instance UID.
*/
enum E_UIDCreation
{
/** Upon compression, assign new SOP instance UID if compression is lossy.
* Upon decompression never assign new SOP instance UID.
*/
EUC_default,
/// always assign new SOP instance UID on compression and decompression
EUC_always,
/// never assign new SOP instance UID
EUC_never
};
/** describes how the decoder should handle planar configuration of
* decompressed color images.
*/
enum E_PlanarConfiguration
{
/** automatically determine whether color-by-plane is required from
* the SOP Class UID and decompressed photometric interpretation
*/
EPC_default,
/// always create color-by-pixel planar configuration
EPC_colorByPixel,
/// always create color-by-plane planar configuration
EPC_colorByPlane
};
/** describes how color space conversion should be handled
* during the conversion of an uncompressed DICOM image to
* a JPEG-compressed image
*/
enum E_CompressionColorSpaceConversion
{
/** encode color images in YCbCr if lossy JPEG.
* If lossless JPEG, images are encoded as RGB unless the source
* image is YCbCr in which case no color conversion is performed.
*/
ECC_lossyYCbCr,
/** encode color images in RGB unless the source
* image is YCbCr in which case no color conversion is performed.
*/
ECC_lossyRGB,
/** convert color images to monochrome before compressing
*/
ECC_monochrome
};
/** describes how color space conversion should be handled
* during the conversion of a JPEG-compressed DICOM image to
* an uncompressed image
*/
enum E_DecompressionColorSpaceConversion
{
/** perform color space conversion from YCbCr to RGB if
* DICOM photometric interpretation indicates YCbCr.
*/
EDC_photometricInterpretation,
/** always perform color space conversion from YCbCr to
* RGB if JPEG data is color image and compression is lossy.
*/
EDC_lossyOnly,
/** always perform color space conversion from YCbCr to
* RGB if JPEG data is color image.
*/
EDC_always,
/** never perform any color space conversion.
*/
EDC_never,
/** perform color space conversion from YCbCr to RGB if
* JPEG data is color image, compression is lossy, and
* the underlying JPEG library "guesses" the color space
* to be YCbCr.
*/
EDC_guessLossyOnly,
/** perform color space conversion from YCbCr to RGB if
* JPEG data is color image, and the underlying JPEG
* library "guesses" the color space to be YCbCr.
*/
EDC_guess
};
// CONDITION CONSTANTS
/// IJG codec suspension return
extern DCMTK_DCMJPEG_EXPORT const OFConditionConst EJ_Suspension;
/// Buffer for decompressed image (8 bits/sample) too small
extern DCMTK_DCMJPEG_EXPORT const OFConditionConst EJ_IJG8_FrameBufferTooSmall;
/// Buffer for decompressed image (12 bits/sample) too small
extern DCMTK_DCMJPEG_EXPORT const OFConditionConst EJ_IJG12_FrameBufferTooSmall;
/// Buffer for decompressed image (16 bits/sample) too small
extern DCMTK_DCMJPEG_EXPORT const OFConditionConst EJ_IJG16_FrameBufferTooSmall;
/// Codec does not support this PhotometricInterpretation
extern DCMTK_DCMJPEG_EXPORT const OFConditionConst EJ_UnsupportedPhotometricInterpretation;
/// Codec does not support this kind of color conversion
extern DCMTK_DCMJPEG_EXPORT const OFConditionConst EJ_UnsupportedColorConversion;
// reserved condition codes for IJG error messages
const unsigned short EJCode_IJG8_Compression = 0x0100;
const unsigned short EJCode_IJG8_Decompression = 0x0101;
const unsigned short EJCode_IJG12_Compression = 0x0102;
const unsigned short EJCode_IJG12_Decompression = 0x0103;
const unsigned short EJCode_IJG16_Compression = 0x0104;
const unsigned short EJCode_IJG16_Decompression = 0x0105;
/** helper class with static methods used from different dcmjpeg classes
* (in particular from the encoder and the decoder part).
*/
class DCMTK_DCMJPEG_EXPORT DcmJpegHelper
{
public:
/** helper function that locates the photometric interpretation attribute
* in a DICOM dataset and returns a parsed value.
* @param item the dataset in which the element is searched
* @return photometric interpretation enum, EPI_Unknown if unknown string or attribute missing
*/
static EP_Interpretation getPhotometricInterpretation(DcmItem *item);
};
#endif