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

📄 dimoopxt.h

📁 转化为DIB位图再显示出来的dicom文件C++代码
💻 H
📖 第 1 页 / 共 5 页
字号:
                                            value2 = lastvalue;                                        else                                            value2 = OFstatic_cast(Uint32, OFstatic_cast(double, vlut->getValue(value)) * gradient1);                                        *(q++) = OFstatic_cast(T3, dlut->getValue(plut->getValue(value2)));                                    }                                }                            } else {                                                      // don't use display: invalid or absent                                const double gradient2 = outrange / OFstatic_cast(double, plut->getAbsMaxRange());                                for (i = 0; i < ocnt; ++i)                                {                                    value = OFstatic_cast(T2, i) + absmin;                                    if (value <= firstentry)                                        value2 = firstvalue;                                    else if (value >= lastentry)                                        value2 = lastvalue;                                    else                                        value2 = OFstatic_cast(Uint32, OFstatic_cast(double, vlut->getValue(value)) * gradient1);                                    *(q++) = OFstatic_cast(T3, OFstatic_cast(double, low) + OFstatic_cast(double, plut->getValue(value2)) * gradient2);                                }                            }                            const T3 *lut0 = lut - OFstatic_cast(T2, inter->getAbsMinimum());  // points to 'zero' entry                            q = Data;                            for (i = Count; i != 0; --i)                                  // apply LUT                                *(q++) = *(lut0 + (*(p++)));                        }                        if (lut == NULL)                                                  // use "normal" transformation                        {                            if (dlut != NULL)                                             // perform display transformation                            {                                if (low > high)                                           // inverse                                {                                    const Uint16 maxvalue = OFstatic_cast(Uint16, vlut->getAbsMaxRange() - 1);                                    for (i = Count; i != 0; --i)                                    {                                        value = OFstatic_cast(T2, *(p++));                // pixel value                                        if (value <= firstentry)                                            value2 = firstvalue;                                        else if (value >= lastentry)                                            value2 = lastvalue;                                        else                                            value2 = OFstatic_cast(Uint32, OFstatic_cast(double, vlut->getValue(value)) * gradient1);                                        *(q++) = OFstatic_cast(T3, dlut->getValue(OFstatic_cast(Uint16, maxvalue - plut->getValue(value2))));                                    }                                } else {                                                  // normal                                    for (i = Count; i != 0; --i)                                    {                                        value = OFstatic_cast(T2, *(p++));                // pixel value                                        if (value <= firstentry)                                            value2 = firstvalue;                                        else if (value >= lastentry)                                            value2 = lastvalue;                                        else                                            value2 = OFstatic_cast(Uint32, OFstatic_cast(double, vlut->getValue(value)) * gradient1);                                        *(q++) = OFstatic_cast(T3, dlut->getValue(plut->getValue(value2)));                                    }                                }                            } else {                                                      // don't use display: invalid or absent                                const double gradient2 = outrange / OFstatic_cast(double, plut->getAbsMaxRange());                                for (i = Count; i != 0; --i)                                {                                    value = OFstatic_cast(T2, *(p++));                    // pixel value                                    if (value <= firstentry)                                        value2 = firstvalue;                                    else if (value >= lastentry)                                        value2 = lastvalue;                                    else                                        value2 = OFstatic_cast(Uint32, OFstatic_cast(double, vlut->getValue(value)) * gradient1);                                    *(q++) = OFstatic_cast(T3, OFstatic_cast(double, low) + OFstatic_cast(double, plut->getValue(value2)) * gradient2);                                }                            }                        }                    } else {                                                              // has no presentation LUT                        createDisplayLUT(dlut, disp, vlut->getBits());                        const double gradient = outrange / OFstatic_cast(double, vlut->getAbsMaxRange());                        const T3 firstvalue = OFstatic_cast(T3, OFstatic_cast(double, low) + OFstatic_cast(double, vlut->getFirstValue()) * gradient);                        const T3 lastvalue = OFstatic_cast(T3, OFstatic_cast(double, low) + OFstatic_cast(double, vlut->getLastValue()) * gradient);                        if (initOptimizationLUT(lut, ocnt))                        {                                                                 // use LUT for optimization                            q = lut;                            if (dlut != NULL)                                             // perform display transformation                            {                                if (low > high)                                           // inverse                                {                                    const Uint16 maxvalue = OFstatic_cast(Uint16, vlut->getAbsMaxRange() - 1);                                    for (i = 0; i < ocnt; ++i)                                    {                                        value = OFstatic_cast(T2, i) + absmin;                                        if (value < firstentry)                                            value = firstentry;                                        else if (value > lastentry)                                            value = lastentry;                                        *(q++) = OFstatic_cast(T3, dlut->getValue(OFstatic_cast(Uint16, maxvalue - vlut->getValue(value))));                                    }                                } else {                                                  // normal                                    for (i = 0; i < ocnt; ++i)                                    {                                        value = OFstatic_cast(T2, i) + absmin;                                        if (value < firstentry)                                            value = firstentry;                                        else if (value > lastentry)                                            value = lastentry;                                        *(q++) = OFstatic_cast(T3, dlut->getValue(vlut->getValue(value)));                                    }                                }                            } else {                                                      // don't use display: invalid or absent                                for (i = 0; i < ocnt; ++i)                                // calculating LUT entries                                {                                    value = OFstatic_cast(T2, i) + absmin;                                    if (value <= firstentry)                                        *(q++) = firstvalue;                                    else if (value >= lastentry)                                        *(q++) = lastvalue;                                    else                                        *(q++) = OFstatic_cast(T3, OFstatic_cast(double, low) + OFstatic_cast(double, vlut->getValue(value)) * gradient);                                }                            }                            const T3 *lut0 = lut - OFstatic_cast(T2, inter->getAbsMinimum());   // points to 'zero' entry                            q = Data;                            for (i = Count; i != 0; --i)                                  // apply LUT                                *(q++) = *(lut0 + (*(p++)));                        }                        if (lut == NULL)                                                  // use "normal" transformation                        {                            if (dlut != NULL)                                             // perform display transformation                            {                                if (low > high)                                           // inverse                                {                                    const Uint16 maxvalue = OFstatic_cast(Uint16, vlut->getAbsMaxRange() - 1);                                    for (i = Count; i != 0; --i)                                    {                                        value = OFstatic_cast(T2, *(p++));                                        if (value < firstentry)                                            value = firstentry;                                        else if (value > lastentry)                                            value = lastentry;                                        *(q++) = OFstatic_cast(T3, dlut->getValue(OFstatic_cast(Uint16, maxvalue - vlut->getValue(value))));                                    }                                } else {                                                  // normal                                    for (i = Count; i != 0; --i)                                    {                                        value = OFstatic_cast(T2, *(p++));                                        if (value < firstentry)                                            value = firstentry;                                        else if (value > lastentry)                                            value = lastentry;                                        *(q++) = OFstatic_cast(T3, dlut->getValue(vlut->getValue(value)));                                    }                                }                            } else {                                                      // don't use display: invalid or absent                                for (i = 0; i < Count; ++i)                                {                                    value = OFstatic_cast(T2, *(p++));                                    if (value <= firstentry)                                        *(q++) = firstvalue;                                    else if (value >= lastentry)                                        *(q++) = lastvalue;                                    else                                        *(q++) = OFstatic_cast(T3, OFstatic_cast(double, low) + OFstatic_cast(double, vlut->getValue(value)) * gradient);                                }                            }                        }                    }                    delete[] lut;                }                if (Count < FrameSize)                    OFBitmanipTemplate<T3>::zeroMem(Data + Count, FrameSize - Count);     // set remaining pixels of frame to zero            }        } else            Data = NULL;    }    /** perform linear scaling to the output data (no windowing)     *     ** @param  inter  pointer to intermediate pixel representation     *  @param  start  offset of the first pixel to be processed     *  @param  plut   presentation LUT (optional, maybe NULL)     *  @param  disp   display function (optional, maybe NULL)     *  @param  low    lowest pixel value for the output data (e.g. 0)     *  @param  high   highest pixel value for the output data (e.g. 255)     */    void nowindow(const DiMonoPixel *inter,                  const Uint32 start,                  const DiLookupTable *plut,                  DiDisplayFunction *disp,                  const T3 low,                  const T3 high)    {        const DiDisplayLUT *dlut = NULL;        const T1 *pixel = OFstatic_cast(const T1 *, inter->getData());        if (pixel != NULL)        {            if (Data == NULL)                                                         // create new output buffer                Data = new T3[FrameSize];            if (Data != NULL)            {#ifdef DEBUG                if (DicomImageClass::checkDebugLevel(DicomImageClass::DL_Informationals))                {                    ofConsole.lockCerr() << "INFO: using VOI routine 'nowindow()'" << endl;                    ofConsole.unlockCerr();                }#endif                const double absmin = inter->getAbsMinimum();                const double absmax = inter->getAbsMaximum();                const double outrange = OFstatic_cast(double, high) - OFstatic_cast(double, low) + 1;                const unsigned long ocnt = OFstatic_cast(unsigned long, inter->getAbsMaxRange());  // number of LUT entries                register const T1 *p = pixel + start;                register T3 *q = Data;                register unsigned long i;                T3 *lut = NULL;                if ((plut != NULL) && (plut->isValid()))                              // has presentation LUT                {#ifdef DEBUG                    if (DicomImageClass::checkDebugLevel(DicomImageClass::DL_Informationals))                    {                        ofConsole.lockCerr() << "INFO: using presentation LUT transformation" << endl;                        ofConsole.unlockCerr();                    }#endif                    createDisplayLUT(dlut, disp, plut->getBits());                    register Uint32 value;                                            // presentation LUT is always unsigned                    const double gradient1 = OFstatic_cast(double, plut->getCount()) / inter->getAbsMaxRange();                    const double gradient2 = outrange / OFstatic_cast(double, plut->getAbsMaxRange());                    if (initOptimizationLUT(lut, ocnt))                    {                                                                 // use LUT for optimization                        q = lut;                        if (dlut != NULL)                                             // perform display transformation                        {                            if (low > high)                                           // inverse

⌨️ 快捷键说明

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