/* * * Copyright (C) 1998-2011, 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: Joerg Riesmeier * * Purpose: DicomColorFlipTemplate (Header) * */ #ifndef DICOFLT_H #define DICOFLT_H #include "dcmtk/config/osconfig.h" #include "dcmtk/dcmimage/dicopxt.h" #include "dcmtk/dcmimgle/diflipt.h" /*---------------------* * class declaration * *---------------------*/ /** Template class to flip color images (on pixel data level) * horizontally and vertically */ template class DiColorFlipTemplate : public DiColorPixelTemplate, protected DiFlipTemplate { public: /** constructor * ** @param pixel pointer to intermediate pixel representation * @param columns number of columns * @param rows number of rows * @param frames number of frames * @param horz flip horizontally if true * @param vert flip vertically if true */ DiColorFlipTemplate(const DiColorPixel *pixel, const Uint16 columns, const Uint16 rows, const Uint32 frames, const int horz, const int vert) : DiColorPixelTemplate(pixel, OFstatic_cast(unsigned long, columns) * OFstatic_cast(unsigned long, rows) * frames), DiFlipTemplate(3, columns, rows, frames) { if ((pixel != NULL) && (pixel->getCount() > 0)) { if (pixel->getCount() == OFstatic_cast(unsigned long, columns) * OFstatic_cast(unsigned long, rows) * frames) flip(OFstatic_cast(const T **, OFconst_cast(void *, pixel->getData())), horz, vert); else { DCMIMAGE_WARN("could not flip image ... corrupted data"); } } } /** destructor */ ~DiColorFlipTemplate() { } private: /** choose flipping algorithm depending on given parameters * ** @param pixel pointer to pixel data (3 components) which should be flipped * @param horz flip horizontally if true * @param vert flip vertically if true */ inline void flip(const T *pixel[3], const int horz, const int vert) { if (this->Init(pixel)) { if (horz && vert) this->flipHorzVert(pixel, this->Data); else if (horz) this->flipHorz(pixel, this->Data); else if (vert) this->flipVert(pixel, this->Data); } } }; #endif