224 lines
6.3 KiB
C++
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
|