/* * * Copyright (C) 1996-2010, 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: DicomYBRImage (Source) * */ #include "dcmtk/config/osconfig.h" #include "dcmtk/dcmdata/dctypes.h" #include "dcmtk/dcmimage/diybrimg.h" #include "dcmtk/dcmimage/diybrpxt.h" #include "dcmtk/dcmimage/dilogger.h" #include "dcmtk/dcmimgle/diinpx.h" #include "dcmtk/dcmimgle/didocu.h" /*----------------* * constructors * *----------------*/ DiYBRImage::DiYBRImage(const DiDocument *docu, const EI_Status status) : DiColorImage(docu, status, 3, !(docu->getFlags() & CIF_KeepYCbCrColorModel) /* RGBColorModel */) { if ((Document != NULL) && (InputData != NULL) && (ImageStatus == EIS_Normal)) { Init(); // create intermediate representation } } /*--------------* * destructor * *--------------*/ DiYBRImage::~DiYBRImage() { } /*********************************************************************/ void DiYBRImage::Init() { /* number of pixels per plane */ const unsigned long planeSize = OFstatic_cast(unsigned long, Columns) * OFstatic_cast(unsigned long, Rows); switch (InputData->getRepresentation()) { case EPR_Uint8: InterData = new DiYBRPixelTemplate(Document, InputData, ImageStatus, planeSize, BitsPerSample, RGBColorModel); break; case EPR_Sint8: InterData = new DiYBRPixelTemplate(Document, InputData, ImageStatus, planeSize, BitsPerSample, RGBColorModel); break; case EPR_Uint16: InterData = new DiYBRPixelTemplate(Document, InputData, ImageStatus, planeSize, BitsPerSample, RGBColorModel); break; case EPR_Sint16: InterData = new DiYBRPixelTemplate(Document, InputData, ImageStatus, planeSize, BitsPerSample, RGBColorModel); break; case EPR_Uint32: InterData = new DiYBRPixelTemplate(Document, InputData, ImageStatus, planeSize, BitsPerSample, RGBColorModel); break; case EPR_Sint32: InterData = new DiYBRPixelTemplate(Document, InputData, ImageStatus, planeSize, BitsPerSample, RGBColorModel); break; } deleteInputData(); checkInterData(); } /*********************************************************************/ int DiYBRImage::processNextFrames(const unsigned long fcount) { if (DiImage::processNextFrames(fcount)) { delete InterData; InterData = NULL; Init(); return (ImageStatus == EIS_Normal); } return 0; }