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

166 lines
3.7 KiB
C++

/*
*
* Copyright (C) 2002-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: dcmimage
*
* Author: Marco Eichelberg
*
* Purpose: class DcmQuantPixel
*
*/
#ifndef DIQTPIX_H
#define DIQTPIX_H
#include "dcmtk/config/osconfig.h"
#include "dcmtk/ofstd/oftypes.h" /* for OFBool */
#include "dcmtk/dcmimage/diqttype.h" /* for DcmQuantHashSize, DcmQuantComponent */
#include "dcmtk/dcmimage/diqtstab.h" /* for DcmScaleTable */
/** objects of this class represent individual RGB pixels. This class is
* used by the color quantization classes. For efficiency considerations,
* all methods are declared inline.
*/
class DCMTK_DCMIMAGE_EXPORT DcmQuantPixel
{
public:
/** default constructor, creates black pixel
*/
DcmQuantPixel()
: red(0)
, green(0)
, blue(0)
{
}
/** copy assignment constructor
*/
DcmQuantPixel(const DcmQuantPixel& arg)
: red(arg.red)
, green(arg.green)
, blue(arg.blue)
{
}
/** destructor
*/
virtual ~DcmQuantPixel()
{
}
// we don't declare a destructor here, but the standard destructor will do.
/// comparison operator for equality
inline OFBool operator==(const DcmQuantPixel& src) const
{
return (red == src.red) && (green == src.green) && (blue == src.blue);
}
/** this method computes the luminance of the current pixel
* according to the NTSC formula. The range of the luminance equals the
* range of the underlying DcmQuantComponent type. However, the
* luminance is returned as a double.
* @return luminance of this pixel
*/
inline double luminance() const
{
return 0.299 * red + 0.587 * green + 0.114 * blue;
}
/** this method computes an unsigned long hash value for the current pixel.
* The hash algorithm is taken from Jef Poskanzer's ppm utility library.
* The return value is guaranteed to be < DcmQuantHashSize.
* @return hash value for current pixel
*/
inline unsigned long hash() const
{
return ((OFstatic_cast(unsigned long, red) * 33023UL + OFstatic_cast(unsigned long, green) * 30013UL +
OFstatic_cast(unsigned long, blue) * 27011UL) & 0x7fffffffUL) % DcmQuantHashSize;
}
/** returns the red component
* @return red component of this pixel
*/
inline DcmQuantComponent getRed() const
{
return red;
}
/** returns the green component
* @return green component of this pixel
*/
inline DcmQuantComponent getGreen() const
{
return green;
}
/** returns the blue component
* @return blue component of this pixel
*/
inline DcmQuantComponent getBlue() const
{
return blue;
}
/** assigns new R, G and B values to this pixel
* @param r new R
* @param g new G
* @param b new B
*/
inline void assign(
DcmQuantComponent r,
DcmQuantComponent g,
DcmQuantComponent b)
{
red = r;
green = g;
blue = b;
}
/** assigns new R, G and B values to this pixel
* using the given scale table in which all
* three values are looked up.
* @param r new R
* @param g new G
* @param b new B
* @param table scale table (LUT) in which R, G and B are looked up.
*/
inline void scale(
DcmQuantComponent r,
DcmQuantComponent g,
DcmQuantComponent b,
const DcmQuantScaleTable& table)
{
red = table[r];
green = table[g];
blue = table[b];
}
private:
/// red color component of this pixel
DcmQuantComponent red;
/// green color component of this pixel
DcmQuantComponent green;
/// blue color component of this pixel
DcmQuantComponent blue;
};
#endif