/* * * Copyright (C) 1996-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: dcmimgle * * Author: Joerg Riesmeier * * Purpose: DicomMonochrome1Image (Header) * */ #ifndef DIMO1IMG_H #define DIMO1IMG_H #include "dcmtk/config/osconfig.h" #include "dcmtk/dcmimgle/dimoimg.h" /*---------------------* * class declaration * *---------------------*/ /** Class for MONOCHROME1 images */ class DCMTK_DCMIMGLE_EXPORT DiMono1Image : public DiMonoImage { public: /** constructor * ** @param docu pointer to dataset (encapsulated) * @param status current image status */ DiMono1Image(const DiDocument *docu, const EI_Status status); /** destructor */ virtual ~DiMono1Image(); /** get color model of internal pixel representation. * @return always returns EPI_Monochrome1 */ virtual EP_Interpretation getInternalColorModel() const { return EPI_Monochrome1; } /** get pixel data with specified format. * (memory is handled internally) * ** @param frame number of frame to be rendered * @param bits number of bits for the output pixel data (depth) * @param planar flags, whether the output data (for multi-planar images) should be planar or not * ** @return untyped pointer to the pixel data if successful, NULL otherwise */ virtual const void *getOutputData(const unsigned long frame, const int bits, const int planar = 0); /** get pixel data with specified format. * (memory is handled externally) * ** @param buffer untyped pointer to the externally allocated memory buffer * @param size size of the memory buffer in bytes (will be checked) * @param frame number of frame to be rendered * @param bits number of bits for the output pixel data (depth) * @param planar flags, whether the output data (for multi-planar images) should be planar or not * ** @return status, true if successful, false otherwise */ virtual int getOutputData(void *buffer, const unsigned long size, const unsigned long frame, const int bits, const int planar = 0); /** create copy of current image object * ** @param fstart first frame to be processed * @param fcount number of frames * ** @return pointer to new DicomImage object (NULL if an error occurred) */ DiImage *createImage(const unsigned long fstart, const unsigned long fcount) const; /** create scaled copy of specified (clipping) area of the current image object. * ** @param left_pos x coordinate of top left corner of area to be scaled * (referring to image origin, negative values create a border around the image) * @param top_pos y coordinate of top left corner of area to be scaled * @param clip_width width of area to be scaled * @param clip_height height of area to be scaled * @param scale_width width of scaled image (in pixels) * @param scale_height height of scaled image (in pixels) * @param interpolate specifies whether scaling algorithm should use interpolation (if necessary). * default: no interpolation (0), preferred interpolation algorithm (if applicable): * 1 = pbmplus algorithm, 2 = c't algorithm, 3 = bilinear magnification, * 4 = bicubic magnification * @param aspect specifies whether pixel aspect ratio should be taken into consideration * (if true, width OR height should be 0, i.e. this component will be calculated * automatically) * @param pvalue P-value used for the border outside the image (0..65535) * ** @return pointer to new DiImage object (NULL if an error occurred) */ DiImage *createScale(const signed long left_pos, const signed long top_pos, const unsigned long clip_width, const unsigned long clip_height, const unsigned long scale_width, const unsigned long scale_height, const int interpolate, const int aspect, const Uint16 pvalue) const; /** create a flipped copy of the current image * ** @param horz flip horizontally if true * @param vert flip vertically if true * ** @return pointer to new DiImage object (NULL if an error occurred) */ DiImage *createFlip(const int horz, const int vert) const; /** create a rotated copy of the current image. * ** @param degree angle by which the image shall be rotated * ** @return pointer to new DiImage object (NULL if an error occurred) */ DiImage *createRotate(const int degree) const; /** create monochrome copy of the current image. * Since the image is already monochrome the effect is the same as with createImage(). * ** @param dummy1 not used * @param dummy2 not used * @param dummy3 not used * ** @return pointer to new DiImage object (NULL if an error occurred) */ DiImage *createMono(const double dummy1, const double dummy2, const double dummy3) const; protected: /** constructor, copy * ** @param image pointer to reference image * @param fstart first frame to be processed * @param fcount number of frames */ DiMono1Image(const DiMonoImage *image, const unsigned long fstart, const unsigned long fcount); /** constructor, scale/clip * ** @param image pointer to reference image * @param left_pos x coordinate of top left corner of area to be scaled * (referring to image origin, negative values create a border around the image) * @param top_pos y coordinate of top left corner of area to be scaled * @param src_cols width of area to be scaled * @param src_rows height of area to be scaled * @param dest_cols width of scaled image (in pixels) * @param dest_rows height of scaled image (in pixels) * @param interpolate specifies whether scaling algorithm should use interpolation (if necessary). * default: no interpolation (0), preferred interpolation algorithm (if applicable): * 1 = pbmplus algorithm, 2 = c't algorithm, 3 = bilinear magnification, * 4 = bicubic magnification * @param aspect specifies whether pixel aspect ratio should be taken into consideration * (if true, width OR height should be 0, i.e. this component will be calculated * automatically) * @param pvalue P-value used for the border outside the image (0..65535) */ DiMono1Image(const DiMonoImage *image, const signed long left_pos, const signed long top_pos, const Uint16 src_cols, const Uint16 src_rows, const Uint16 dest_cols, const Uint16 dest_rows, const int interpolate = 0, const int aspect = 0, const Uint16 pvalue = 0); /** constructor, flip * ** @param image pointer to reference image ** @param horz flip horizontally if true * @param vert flip vertically if true */ DiMono1Image(const DiMonoImage *image, const int horz, const int vert); /** constructor, rotate * ** @param image pointer to reference image * @param degree angle by which the image shall be rotated */ DiMono1Image(const DiMonoImage *image, const int degree); }; #endif