⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 diluptab.h

📁 转化为DIB位图再显示出来的dicom文件C++代码
💻 H
字号:
/* * *  Copyright (C) 1996-2005, OFFIS * *  This software and supporting documentation were developed by * *    Kuratorium OFFIS e.V. *    Healthcare Information and Communication Systems *    Escherweg 2 *    D-26121 Oldenburg, Germany * *  THIS SOFTWARE IS MADE AVAILABLE,  AS IS,  AND OFFIS MAKES NO  WARRANTY *  REGARDING  THE  SOFTWARE,  ITS  PERFORMANCE,  ITS  MERCHANTABILITY  OR *  FITNESS FOR ANY PARTICULAR USE, FREEDOM FROM ANY COMPUTER DISEASES  OR *  ITS CONFORMITY TO ANY SPECIFICATION. THE ENTIRE RISK AS TO QUALITY AND *  PERFORMANCE OF THE SOFTWARE IS WITH THE USER. * *  Module:  dcmimgle * *  Author:  Joerg Riesmeier * *  Purpose: DicomLookupTable (Header) * *  Last Update:      $Author: meichel $ *  Update Date:      $Date: 2005/12/08 16:47:45 $ *  CVS/RCS Revision: $Revision: 1.24 $ *  Status:           $State: Exp $ * *  CVS/RCS Log at end of file * */#ifndef DILUPTAB_H#define DILUPTAB_H#include "dcmtk/config/osconfig.h"#include "dcmtk/dcmdata/dctagkey.h"#include "dcmtk/dcmimgle/dibaslut.h"#include "dcmtk/dcmimgle/diobjcou.h"/*------------------------* *  forward declarations  * *------------------------*/class DcmObject;class DcmUnsignedShort;class DcmLongString;class DiDocument;/*---------------------* *  class declaration  * *---------------------*//** Class to handle color palette look-up tables */class DiLookupTable  : public DiBaseLUT,    public DiObjectCounter{ public:    /** constructor     *     ** @param  docu         pointer to dataset (encapsulated)     *  @param  descriptor   tag key containing the LUT descriptor     *  @param  data         tag key containing the LUT data     *  @param  explanation  tag key containing the LUT explanation     *  @param  ignoreDepth  ignore third value of LUT descriptor if OFTrue     *  @param  status       pointer to image status variable (optional)     */    DiLookupTable(const DiDocument *docu,                  const DcmTagKey &descriptor,                  const DcmTagKey &data,                  const DcmTagKey &explanation,                  const OFBool ignoreDepth = OFFalse,                  EI_Status *status = NULL);    /** constructor     *     ** @param  docu         pointer to dataset (encapsulated)     *  @param  sequence     tag key containing the LUT sequence     *  @param  descriptor   tag key containing the LUT descriptor     *  @param  data         tag key containing the LUT data     *  @param  explanation  tag key containing the LUT explanation     *  @param  ignoreDepth  ignore third value of LUT descriptor if OFTrue     *  @param  pos          position in the LUT sequence which should be used (optional)     *  @param  card         pointer to storage area where the number of sequence entries     *                       should be stored (optional)     */    DiLookupTable(const DiDocument *docu,                  const DcmTagKey &sequence,                  const DcmTagKey &descriptor,                  const DcmTagKey &data,                  const DcmTagKey &explanation,                  const OFBool ignoreDepth = OFFalse,                  const unsigned long pos = 0,                  unsigned long *card = NULL);    /** constructor     *     ** @param  data         element containing the LUT data     *  @param  descriptor   element containing the LUT descriptor     *  @param  explanation  element containing the LUT explanation (optional)     *  @param  ignoreDepth  ignore third value of LUT descriptor if OFTrue     *  @param  first        expected value for "first input value mapped" (optional)     *  @param  status       pointer to image status variable (optional)     */    DiLookupTable(const DcmUnsignedShort &data,                  const DcmUnsignedShort &descriptor,                  const DcmLongString *explanation = NULL,                  const OFBool ignoreDepth = OFFalse,                  const signed long first = -1,                  EI_Status *status = NULL);    /** constructor     *     ** @param  buffer  pointer to array with LUT entries     *  @param  count   number of LUT entries     *  @param  bits    number of bits per entry     */    DiLookupTable(Uint16 *buffer,                  const Uint32 count,                  const Uint16 bits);    /** destructor     */    virtual ~DiLookupTable();    /** invert all LUT values.     *  (new_value = max_value - old_value, e.g. used for presentation LUTs)     *     ** @param  flag  if bit 0 is set (0x1, default) the internal copy of the LUT data is modified     *                   or a copy of the original data is created (if not already existing),     *                if bit 1 is set (0x2) the original LUT data is modified,     *                a combination of both modes is also supported.     *     ** @return status true if successful (0x1 if internal data modified, 0x2 if original data, 0x3 if both),     *                 false otherwise     */    int invertTable(const int flag = 0x1);    /** mirror the order of all LUT entries.    *   i.e. the last one becomes the first etc.     *  (value[i] = value[last - i], e.g. used for presentation LUTs)     *     ** @param  flag  if bit 0 is set (0x1, default) the internal copy of the LUT data is modified     *                   or a copy of the original data is created (if not already existing),     *                if bit 1 is set (0x2) the original LUT data is modified,     *                a combination of both modes is also supported.     *     ** @return status true if successful (0x1 if internal data modified, 0x2 if original data, 0x3 if both),     *                 false otherwise     */    int mirrorTable(const int flag = 0x1);    /** create an inverse copy of the current LUT.     *  (input values become output values and vice versa)     *  This function is used for DICOM print (mainly 8<->12 bit).     *     ** @return pointer to inverse LUT     */    DiLookupTable *createInverseLUT() const;    /** compares current LUT with specified LUT     *     ** @param  data        element containing the LUT data     *  @param  descriptor  element containing the LUT descriptor     *     ** @return true if LUTs are not equal (1 = invalid LUT / memory error,     *                                      2 = descriptor differs,     *                                      3 = data differs)     *          false (0) otherwise     */    int compareLUT(const DcmUnsignedShort &data,                   const DcmUnsignedShort &descriptor);    /** compares current LUT with specified LUT     *     ** @param  lut  LUT to be compared with the current one     *     ** @return OFTrue if LUTs are equal, OFFalse otherwise     */    virtual OFBool operator==(const DiBaseLUT &lut);    /** compares current LUT with specified LUT     *     ** @param  lut  LUT to be compared with the current one     *     ** @return OFTrue if LUTs are equal, OFFalse otherwise     */    virtual OFBool operator==(const DiLookupTable &lut); protected:    /** initialize lookup table     *     ** @param  docu         pointer to dataset (encapsulated)     *  @param  obj          pointer to item in dataset where to start (maybe NULL)     *  @param  descriptor   tag key containing the LUT descriptor     *  @param  data         tag key containing the LUT data     *  @param  explanation  tag key containing the LUT explanation     *  @param  ignoreDepth  ignore third value of LUT descriptor if OFTrue     *  @param  status       pointer to image status variable (optional)     */    void Init(const DiDocument *docu,              DcmObject *obj,              const DcmTagKey &descriptor,              const DcmTagKey &data,              const DcmTagKey &explanation,              const OFBool ignoreDepth = OFFalse,              EI_Status *status = NULL);    /** check (and possibly correct) lookup table for consistency     *     ** @param  count        number of LUT entries     *  @param  bits         bits per LUT entry     *  @param  ignoreDepth  ignore 'bits' value, determine depth automatically     *  @param  status       pointer to image status variable (optional)     */    void checkTable(unsigned long count,                    Uint16 bits,                    const OFBool ignoreDepth = OFFalse,                    EI_Status *status = NULL);    /** check (and possibly correct) value for bits per LUT entry.     *  Be very lenient with the value stored in the LUT descriptor and     *  therefore perform some addition (heuristical tests) to assume the     *  most probable value.     *     ** @param  bits         actual value for bits per entry     *  @param  rightBits    right value (8 or 16)     *  @param  wrongBits    wrong value (8 or 16)     *  @param  ignoreDepth  ignore 'bits' value, determine depth automatically     */    void checkBits(const Uint16 bits,                   const Uint16 rightBits,                   const Uint16 wrongBits = 0,                   const OFBool ignoreDepth = OFFalse); private:    /// number of bits originally allocated for a LUT entry    int OriginalBitsAllocated;    /// pointer to original data buffer (where the LUT data is created from)    void *OriginalData; // --- declarations to avoid compiler warnings    DiLookupTable(const DiLookupTable &);    DiLookupTable &operator=(const DiLookupTable &);};#endif/* * * CVS/RCS Log: * $Log: diluptab.h,v $ * Revision 1.24  2005/12/08 16:47:45  meichel * Changed include path schema for all DCMTK header files * * Revision 1.23  2003/12/17 16:17:29  joergr * Added new compatibility flag that allows to ignore the third value of LUT * descriptors and to determine the bits per table entry automatically. * * Revision 1.22  2003/12/08 18:24:15  joergr * Removed leading underscore characters from preprocessor symbols (reserved * symbols). Updated CVS header. * * Revision 1.21  2003/06/12 15:08:34  joergr * Fixed inconsistent API documentation reported by Doxygen. * * Revision 1.20  2002/12/09 13:32:51  joergr * Renamed parameter/local variable to avoid name clashes with global * declaration left and/or right (used for as iostream manipulators). * * Revision 1.19  2001/06/01 15:49:43  meichel * Updated copyright header * * Revision 1.18  2000/07/07 13:42:30  joergr * Added support for LIN OD presentation LUT shape. * * Revision 1.17  2000/03/08 16:24:17  meichel * Updated copyright header. * * Revision 1.16  2000/03/06 18:19:36  joergr * Moved get-method to base class, renamed method and made method virtual to * avoid hiding of methods (reported by Sun CC 4.2). * * Revision 1.15  1999/11/24 11:13:46  joergr * Added method to mirror order of entries in look-up tables. * Enhanced comments for methods "inverting" the LUT values/entries. * * Revision 1.14  1999/11/03 12:52:08  joergr * Added copy constructor and assignment operator to avoid compiler warnings. * * Revision 1.13  1999/10/20 10:34:44  joergr * Enhanced method invertTable to distinguish between copy of LUT data and * original (referenced) LUT data. * * Revision 1.12  1999/09/30 11:37:09  joergr * Added methods to compare two lookup tables. * * Revision 1.11  1999/09/17 12:22:53  joergr * Added/changed/completed DOC++ style comments in the header files. * * Revision 1.10  1999/09/08 15:19:24  joergr * Completed implementation of setting inverse presentation LUT as needed * e.g. for DICOM print (invert 8->12 bits PLUT). * * Revision 1.9  1999/07/23 14:01:49  joergr * Added dummy method (no implementation yet) to create inverse LUTs. * * Revision 1.8  1999/05/03 11:09:28  joergr * Minor code purifications to keep Sun CC 2.0.1 quiet. * * Revision 1.7  1999/03/24 17:20:04  joergr * Added/Modified comments and formatting. * * Revision 1.6  1999/02/03 17:27:23  joergr * Added base class for look-up tables (moved main functionality of class * DiLookupTable to DiBaseLUT). * * Revision 1.5  1998/12/23 11:34:34  joergr * Changed behaviour of getLabel/Description/Explanation() methods: return * NULL if string empty, no empty string "". * * Revision 1.4  1998/12/22 14:24:36  joergr * Changed parameter type. * Added method getAbsMaxRange. * * Revision 1.3  1998/12/16 16:31:30  joergr * Added explanation string to LUT class (retrieved from dataset). * * Revision 1.2  1998/12/14 17:19:19  joergr * Added support for signed values as second entry in look-up tables * (= first value mapped). * * Revision 1.1  1998/11/27 15:10:21  joergr * Added copyright message. * Added support of object counter class. * Added constructors to use external modality transformations. * Added methods to support presentation LUTs and shapes. * * Revision 1.3  1998/07/01 08:39:22  joergr * Minor changes to avoid compiler warnings (gcc 2.8.1 with additional * options), e.g. add copy constructors. * * Revision 1.2  1998/05/11 14:53:18  joergr * Added CVS/RCS header to each file. * * */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -