DYT/Tool/3rdParty_x64/include/dcmtk/dcmpstat/dvpstat.h

1331 lines
65 KiB
C
Raw Normal View History

2024-11-22 15:19:31 +00:00
/*
*
* Copyright (C) 1998-2012, 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: dcmpstat
*
* Author: Marco Eichelberg
*
* Purpose:
* classes: DVPresentationState
*
*/
#ifndef DVPSTAT_H
#define DVPSTAT_H
#include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */
#include "dcmtk/dcmpstat/dcmpstat.h"
class DicomImage;
class DiDisplayFunction;
/** a Grayscale Softcopy Presentation State.
* This class manages the data structures comprising a Presentation State object.
* Presentation states can be created, read, written, and modified.
*/
class DCMTK_DCMPSTAT_EXPORT DVPresentationState: public DcmPresentationState
{
public:
/** default constructor
* @param dispFunction list of objects describing the display
* characteristics of the monitor. Used to implement the standard display function.
* The parameter should be an array with DVPSD_max entries (see DVInterface).
* If absent, no display transform is performed.
* @param minPrintBitmapX default value for minimum print bitmap size X
* @param minPrintBitmapY default value for minimum print bitmap size Y
* @param maxPrintBitmapX default value for maximum print bitmap size X
* @param maxPrintBitmapY default value for maximum print bitmap size Y
* @param maxPreviewImageX default value for maximum preview image size X
* @param maxPreviewImageY default value for maximum preview image size Y
*/
DVPresentationState(
DiDisplayFunction **dispFunction=NULL,
unsigned long minPrintBitmapX=0,
unsigned long minPrintBitmapY=0,
unsigned long maxPrintBitmapX=0,
unsigned long maxPrintBitmapY=0,
unsigned long maxPreviewImageX=0,
unsigned long maxPreviewImageY=0);
/// destructor
virtual ~DVPresentationState();
/** resets the object to initial state.
* After this call, the object is in the same state as after
* creation with the default constructor.
*/
void clear();
/** reads a presentation state from a DICOM dataset.
* The DICOM elements of the presentation state are copied
* from the dataset to this object.
* The completeness and correctness of the
* presentation state (presence of all required elements,
* value multiplicity) is checked.
* If this method returns an error code, the object is in undefined state afterwards.
* @param dset the dataset from which the presentation state is to be read
* @return EC_Normal if successful, an error code otherwise.
*/
OFCondition read(DcmItem &dset);
/** creates a default presentation state for a DICOM image.
* A number of flags specify how curves, overlays, VOI transformations,
* a display shutter and a presentation LUT shape
* should be treated when found in the image IOD.
* If this method returns an error code, the object is in undefined state afterwards.
* @param dset the DICOM dataset containing the image IOD
* @param overlayActivation flag defining how overlays should be handled
* (copied, activated or ignored). Default: Copy overlays.
* @param voiActivation flag defining how VOI LUTs or VOI window width/center should
* be handled. Default: Use VOI and prefer VOI LUT from VOI window.
* @param curveActivation flag defining whether curves in the image should
* be activated. Default: Activate curves.
* @param shutterActivation flag defining whether a shutter (not bitmap shutter)
* should be copied to the presentation state when found in the image.
* Default: Copy shutter.
* @param presentationActivation flag defining whether a presentation LUT shape
* should be copied to the presentation state when found in the image.
* Default: Copy presentation LUT shape.
* @param layering flag defining how graphic layers should be created for
* activated overlays and curves. Default: Create one layer for all overlays
* and another layer for all curves.
* @param aetitle the series retrieveAETitle. Must be a valid DICOM 'AE' value. Default: value absent.
* @param filesetID the series storageMediaFileSetID. Must be a valid DICOM 'SH' value. Default: value absent.
* @param filesetUID the series storageMediaFileSetUID. Must be a valid DICOM UID. Default: value absent.
* @return EC_Normal upon success, an error code otherwise.
*/
OFCondition createFromImage(DcmItem &dset,
DVPSoverlayActivation overlayActivation = DVPSO_copyOverlays,
DVPSVOIActivation voiActivation = DVPSV_preferVOILUT,
OFBool curveActivation = OFTrue,
OFBool shutterActivation = OFTrue,
OFBool presentationActivation = OFTrue,
DVPSGraphicLayering layering = DVPSG_twoLayers,
const char * aetitle = NULL,
const char * filesetID = NULL,
const char * filesetUID = NULL);
/** adds a reference to the currently attached image to this
* presentation state. This method checks if the given image
* is not yet referenced and if its Study UID and SOP class
* match for this presentation state and returns an error code otherwise.
* @param aetitle the series retrieveAETitle. Must be a valid DICOM 'AE' value. Default: value absent.
* @param filesetID the series storageMediaFileSetID. Must be a valid DICOM 'SH' value. Default: value absent.
* @param filesetUID the series storageMediaFileSetUID. Must be a valid DICOM UID. Default: value absent.
* @return EC_Normal if successful, an error code otherwise.
*/
OFCondition addImageReferenceAttached(
const char *aetitle=NULL,
const char *filesetID=NULL,
const char *filesetUID=NULL);
/** removes a reference to the currently attached image from this presentation state.
* @return EC_Normal if successful, an error code otherwise.
*/
OFCondition removeImageReferenceAttached();
/** sets the current Presentation LUT type.
* DVPSP_table can only be used if the presentation state
* contains a lookup table, i.e. if havePresentationLookupTable() returns OFTrue.
* @param newType the new presentation LUT type.
* @return EC_Normal if successful, an error code otherwise.
*/
OFCondition setCurrentPresentationLUT(DVPSPresentationLUTType newType);
/** resets the Presentation LUT to the default LUT shape
* which is DVPSP_identity for MONOCHROME2 images and DVPSP_inverse for MONOCHROME1.
* DVPSP_table can only be used if the presentation state
* contains a lookup table, i.e. if havePresentationLookupTable() returns OFTrue.
* @return EC_Normal if successful, an error code otherwise.
*/
OFCondition setDefaultPresentationLUTShape();
/** stores a presentation lookup table in the presentation state.
* This method stores a presentation lookup table in the
* presentation state and activates it. The LUT is copied to
* the presentation state. If the method returns EC_Normal,
* any old presentation LUT in the presentation state is overwritten.
* This method keeps the inverse/not inverse status intact,
* i.e. inverses the LUT if necessary.
* @param lutDescriptor the LUT Descriptor in DICOM format (VM=3)
* @param lutData the LUT Data in DICOM format
* @param lutExplanation the LUT Explanation in DICOM format, may be empty.
* @return EC_Normal if successful, an error code otherwise.
*/
OFCondition setPresentationLookupTable(
DcmUnsignedShort& lutDescriptor,
DcmUnsignedShort& lutData,
DcmLongString& lutExplanation);
/** stores a presentation lookup table in the presentation state.
* This method stores a presentation lookup table in the
* presentation state and activates it. The LUT is copied to
* the presentation state. Overwrites old LUT. If unsuccessful,
* LUT is set to DVPSP_identity.
* This method keeps the inverse/not inverse status intact,
* i.e. inverses the LUT if necessary.
* @param dset dataset from which the Presentation LUT SQ or Shape is read.
* @return EC_Normal if successful, an error code otherwise.
*/
OFCondition setPresentationLookupTable(DcmItem &dset);
/** writes the current Presentation LUT to a DICOM dataset.
* Copies of the DICOM element managed by this object are inserted into
* the DICOM dataset. In the case of a MONOCHROME1 image an inverted
* LUT is written to dataset because the print bitmap is always MONOCHROME2.
* @param dset the dataset to which the Presentation LUT SQ/Shape is written
* @return EC_Normal if successful, an error code otherwise.
*/
OFCondition writePresentationLUTforPrint(DcmItem &dset);
/** checks whether the attached image is MONOCHROME1. In this case, the
* presentation LUT must be reversed when applied to the print bitmap
* which is always MONOCHROME2.
* @return OFTrue if attached image is MONOCHROME1, OFFalse otherwise.
*/
OFBool isMonochrome1Image() { return currentImageMonochrome1; }
/** check if a VOI window is currently active
* @return OFTrue if a VOI window is active
*/
OFBool haveActiveVOIWindow();
/** check if a VOI LUT is currently active
* @return OFTrue if a VOI LUT is active
*/
OFBool haveActiveVOILUT();
/** returns a description string for a currently active VOI transform.
* If no description is available, NULL is returned.
* @return a pointer to a string or NULL.
*/
const char *getCurrentVOIDescription();
/** gets the width of the current VOI window.
* May only be called if haveActiveVOIWindow() is OFTrue.
* @param w the window width is returned in this parameter
* @return EC_Normal upon success, an error code otherwise.
*/
OFCondition getCurrentWindowWidth(double &w);
/** get the center of the current VOI window.
* May only be called if haveActiveVOIWindow() is OFTrue.
* @param c the window center is returned in this parameter
* @return EC_Normal upon success, an error code otherwise.
*/
OFCondition getCurrentWindowCenter(double &c);
/** gets the number of VOI LUTs available in the attached image.
*/
size_t getNumberOfVOILUTsInImage();
/** gets the number of VOI Windows available in the attached image.
*/
size_t getNumberOfVOIWindowsInImage();
/** returns a description string for the given VOI LUT in the attached
* image.
* If no description for the given index is available, NULL is returned.
* @param idx index, must be < getNumberOfVOILUTsInImage()
* @return a pointer to a string or NULL.
*/
const char *getDescriptionOfVOILUTsInImage(size_t idx);
/** returns a description string for the given VOI Window
* in the attached image.
* If no description for the given index is available, NULL is returned.
* @param idx index, must be < getNumberOfVOIWindowsInImage()
* @return a pointer to a string or NULL.
*/
const char *getDescriptionOfVOIWindowsInImage(size_t idx);
/** activates one of the VOI LUTs from the attached image.
* The applicability of the activation is controlled by the applicability parameter.
* @param idx index of the VOI transform, must be < getNumberOfVOILUTsInImage().
* @param applicability defines the applicability of the new VOI transform.
* @return EC_Normal upon success, an error code otherwise.
*/
OFCondition setVOILUTFromImage(size_t idx,
DVPSObjectApplicability applicability=DVPSB_currentImage);
/** activates one of the VOI Windows from the attached image.
* The applicability of the activation is controlled by the applicability parameter.
* @param idx index of the VOI transform, must be < getNumberOfVOIWindowsInImage().
* @param applicability defines the applicability of the new VOI transform.
* @return EC_Normal upon success, an error code otherwise.
*/
OFCondition setVOIWindowFromImage(size_t idx,
DVPSObjectApplicability applicability=DVPSB_currentImage);
/** sets a user defined VOI window center and width.
* The applicability of the VOI window is controlled by the applicability parameter.
* @param wCenter the window center
* @param wWidth the window width
* @param description an optional description. Default: absent.
* @param applicability defines the applicability of the new VOI transform.
* @return EC_Normal upon success, an error code otherwise.
*/
OFCondition setVOIWindow(double wCenter, double wWidth, const char *description=NULL,
DVPSObjectApplicability applicability=DVPSB_currentImage);
/** stores a VOI lookup table in the presentation state.
* This method stores a VOI lookup table in the
* presentation state and activates it. The LUT is copied to
* the presentation state.
* If the method returns an error code, an old LUT is left unchanged.
* The applicability of the VOI LUT is controlled by the applicability parameter.
* @param lutDescriptor the LUT Descriptor in DICOM format (VM=3)
* @param lutData the LUT Data in DICOM format
* @param lutExplanation the LUT Explanation in DICOM format, may be empty.
* @param applicability defines the applicability of the new VOI transform.
* @return EC_Normal if successful, an error code otherwise.
*/
OFCondition setVOILUT(
DcmUnsignedShort& lutDescriptor,
DcmUnsignedShort& lutData,
DcmLongString& lutExplanation,
DVPSObjectApplicability applicability=DVPSB_currentImage);
/** deactivates the current VOI transformation.
* The applicability of the deactivation is controlled by the applicability parameter.
* After a call to this method, no VOI transform is active for the current image and frame.
* @param applicability defines the applicability of the new VOI transform.
*/
void deactivateVOI(DVPSObjectApplicability applicability=DVPSB_currentImage);
/** stores VOI lookup table with a gamma curve shape in the presentation state.
* If a VOI window is currently active the center and width values are used to specify
* the number of LUT entries and the first value mapped, otherwise the full pixel range
* is used. The output range of the LUT is always 16 bit (data is stored as OW).
* This method stores a VOI lookup table in the presentation state and activates it.
* The LUT is copied to the presentation state.
* If the method returns an error code, an old LUT is left unchanged.
* The applicability of the VOI LUT is controlled by the applicability parameter.
* @param gammaValue gamma value used to create the VOI LUT data
* @param applicability defines the applicability of the new VOI transform.
* @return EC_Normal if successful, an error code otherwise.
*/
OFCondition setGammaVOILUT(double gammaValue, DVPSObjectApplicability applicability=DVPSB_currentImage);
/** gets the presentation size mode for the current image and frame.
* This method may only be called when an image is attached to the presentation state.
* @return presentation size mode
*/
DVPSPresentationSizeMode getDisplayedAreaPresentationSizeMode();
/** gets the presentation pixel aspect ratio for for the current image and frame.
* Pixel aspect ratio is defined here as the width of a pixel divided
* by the height of a pixel (x/y).
* This method may only be called when an image is attached to the presentation state.
* @return pixel aspect ratio
*/
double getDisplayedAreaPresentationPixelAspectRatio();
/** gets the displayed area top lefthand corner and
* bottom righthand corner for the current potentially rotated and flipped image and frame.
* This method may only be called when an image is attached to the presentation state.
* @param tlhcX the displayed area top lefthand corner X value is returned in this parameter
* @param tlhcY the displayed area top lefthand corner Y value is returned in this parameter
* @param brhcX the displayed area bottom righthand corner X value is returned in this parameter
* @param brhcY the displayed area bottom righthand corner Y value is returned in this parameter
* @return EC_Normal if successful, an error code otherwise.
*/
OFCondition getStandardDisplayedArea(Sint32& tlhcX, Sint32& tlhcY, Sint32& brhcX, Sint32& brhcY);
/** gets the displayed area top lefthand corner and
* bottom righthand corner for the current image and frame, as if the image was unrotated
* This method may only be called when an image is attached to the presentation state.
* @param tlhcX the displayed area top lefthand corner X value is returned in this parameter
* @param tlhcY the displayed area top lefthand corner Y value is returned in this parameter
* @param brhcX the displayed area bottom righthand corner X value is returned in this parameter
* @param brhcY the displayed area bottom righthand corner Y value is returned in this parameter
* @return EC_Normal if successful, an error code otherwise.
*/
OFCondition getImageRelativeDisplayedArea(Sint32& tlhcX, Sint32& tlhcY, Sint32& brhcX, Sint32& brhcY);
/** gets the presentation pixel spacing for the current image and frame if it is known.
* @param x the horizontal pixel spacing (mm) is returned in this parameter upon success
* @param y the vertical pixel spacing (mm) is returned in this parameter upon success
* @return EC_Normal if successful, an error code if no presentation pixel spacing is available.
*/
OFCondition getDisplayedAreaPresentationPixelSpacing(double& x, double& y);
/** gets the presentation pixel magnification ratio for the current image and frame if it is present.
* @param magnification the magnification ratio is returned in this parameter upon success
* @return EC_Normal if successful, an error code if no magnification ratio is available.
*/
OFCondition getDisplayedAreaPresentationPixelMagnificationRatio(double& magnification);
/** checks if "TRUE SIZE" can be used as presentation size mode for the current image and frame
* (i.e. pixel spacing is known).
* @return OFTrue if TRUE SIZE mode is available, OFFalse otherwise.
*/
OFBool canUseDisplayedAreaTrueSize();
/** sets the displayed area and size mode (for the current frame, the current image
* or all images referenced by the presentation state object).
* @param sizeMode presentation size mode.
* @param tlhcX displayed area top lefthand corner X
* @param tlhcY displayed area top lefthand corner Y
* @param brhcX displayed area bottom righthand corner X
* @param brhcY displayed area bottom righthand corner Y
* @param magnification magnification factor - ignored unless sizeMode==DVPSD_magnify.
* @param applicability defines the applicability of the new displayed area definition.
* Possible choices are: DVPSB_currentFrame - current frame only,
* DVPSB_currentImage - all frames of current image (default),
* and DVPSB_allImages - all images referenced by this presentation state.
* The last choice should be used with care
* because it will also cause the pixel spacing or pixel aspect ratio of the current image
* to be applied to all images referenced by the presentation state.
* @return EC_Normal if successful, an error code otherwise.
*/
OFCondition setStandardDisplayedArea(
DVPSPresentationSizeMode sizeMode,
Sint32 tlhcX, Sint32 tlhcY,
Sint32 brhcX, Sint32 brhcY,
double magnification=1.0,
DVPSObjectApplicability applicability=DVPSB_currentImage);
/** sets the displayed area and size mode (for the current frame, the current image
* or all images referenced by the presentation state object).
* Treats the image as if it was neither rotated nor flipped.
* @param sizeMode presentation size mode.
* @param tlhcX displayed area top lefthand corner X
* @param tlhcY displayed area top lefthand corner Y
* @param brhcX displayed area bottom righthand corner X
* @param brhcY displayed area bottom righthand corner Y
* @param magnification magnification factor - ignored unless sizeMode==DVPSD_magnify.
* @param applicability defines the applicability of the new displayed area definition.
* Possible choices are: DVPSB_currentFrame - current frame only,
* DVPSB_currentImage - all frames of current image (default),
* and DVPSB_allImages - all images referenced by this presentation state.
* The last choice should be used with care
* because it will also cause the pixel spacing or pixel aspect ratio of the current image
* to be applied to all images referenced by the presentation state.
* @return EC_Normal if successful, an error code otherwise.
*/
OFCondition setImageRelativeDisplayedArea(
DVPSPresentationSizeMode sizeMode,
Sint32 tlhcX, Sint32 tlhcY,
Sint32 brhcX, Sint32 brhcY,
double magnification=1.0,
DVPSObjectApplicability applicability=DVPSB_currentImage);
/** deactivates display shutter of given type.
* After a call to this method haveShutter(type) will return OFFalse.
* @param type the shutter type
*/
void removeShutter(DVPSShutterType type);
/** sets and activates rectangular display shutter.
* If a bitmap shutter is exists, it is deactivated if this
* method returns successfully. If no shutter display value exists,
* a default of 0 (black) is set.
* @param lv the left vertical edge
* @param rv the right vertical edge
* @param uh the upper horizontal edge
* @param lh the lower horizontal edge
* @return EC_Normal upon success, an error code otherwise.
*/
OFCondition setRectShutter(Sint32 lv, Sint32 rv, Sint32 uh, Sint32 lh);
/** sets and activates circular display shutter.
* If a bitmap shutter is exists, it is deactivated if this
* method returns successfully. If no shutter display value exists,
* a default of 0 (black) is set.
* @param centerX the X component of the shutter center
* @param centerY the Y component of the shutter center
* @param radius the (horizontal) radius of the shutter
* @return EC_Normal upon success, an error code otherwise.
*/
OFCondition setCircularShutter(Sint32 centerX, Sint32 centerY, Sint32 radius);
/** sets polygonal display shutter point.
* This method adds a point to the polygonal display shutter,
* which must already have at least an origin.
* If the point set with this method is identical to the
* origin of the shutter, the shutter is activated and
* a possible bitmap shutter is deactivated. If no shutter display value exists,
* a default of 0 (black) is set.
* @param x the x component of the shutter origin
* @param y the x component of the shutter origin
* @return EC_Normal upon success, an error code otherwise.
*/
OFCondition addPolyShutterVertex(Sint32 x, Sint32 y);
/** removes and deletes a graphic layer. All text, graphic, curve
* and overlay objects on this graphic layer are also deleted or deactivated, respectively.
* @param idx index of the graphic layer, must be < getNumberOfGraphicLayers()
* @return EC_Normal upon success, an error code otherwise
*/
OFCondition removeGraphicLayer(size_t idx);
/** returns the number of text objects for the given
* graphic layer.
* Only the objects that are applicable to the current (attached) image
* and the selected frame number are used by this method.
* @param layer index of the graphic layer, must be < getNumberOfGraphicLayers()
* @return number of text objects
*/
size_t getNumberOfTextObjects(size_t layer);
/** gets the text object with the given index
* on the given layer. If the text object or the graphic layer does
* not exist, NULL is returned.
* Only the objects that are applicable to the current (attached) image
* and the selected frame number are used by this method.
* @param layer index of the graphic layer, must be < getNumberOfGraphicLayers()
* @param idx index of the text object, must be < getNumberOfTextObjects(layer)
* @return a pointer to the text object
*/
DVPSTextObject *getTextObject(size_t layer, size_t idx);
/** creates a new text object on the given layer.
* Returns a pointer to the new text object.
* If the creation of the text object fails or if the graphic layer
* does not exist, NULL is returned.
* @param layer index of the graphic layer, must be < getNumberOfGraphicLayers()
* @param applicability defines to which images/frames the new object applies.
* Default: all images referenced by the presentation state.
* @return a pointer to the new text object
*/
DVPSTextObject *addTextObject(size_t layer,
DVPSObjectApplicability applicability=DVPSB_allImages);
/** deletes the text object with the given index
* on the given layer.
* Only the objects that are applicable to the current (attached) image
* and the selected frame number are used by this method.
* @param layer index of the graphic layer, must be < getNumberOfGraphicLayers()
* @param idx index of the text object, must be < getNumberOfTextObjects(layer)
* @return EC_Normal upon success, an error code otherwise
*/
OFCondition removeTextObject(size_t layer, size_t idx);
/** moves the text object with the given index on the given
* layer to a different layer.
* Only the objects that are applicable to the current (attached) image
* and the selected frame number are used by this method.
* @param old_layer index of the graphic layer on which the text object is,
* must be < getNumberOfGraphicLayers()
* @param idx index of the text object, must be < getNumberOfTextObjects(layer)
* @param new_layer index of the graphic layer to which the text object is moved,
* must be < getNumberOfGraphicLayers()
* @param applicability defines to which images/frames the new object applies from now on.
* Default: all images referenced by the presentation state.
* @return EC_Normal upon success, an error code otherwise
*/
OFCondition moveTextObject(size_t old_layer, size_t idx, size_t new_layer,
DVPSObjectApplicability applicability=DVPSB_allImages);
/** returns the number of graphic objects for the given
* graphic layer.
* Only the objects that are applicable to the current (attached) image
* and the selected frame number are used by this method.
* @param layer index of the graphic layer, must be < getNumberOfGraphicLayers()
* @return number of graphic objects
*/
size_t getNumberOfGraphicObjects(size_t layer);
/** gets the graphic object with the given index
* on the given layer. If the graphic object or the graphic layer does
* not exist, NULL is returned.
* Only the objects that are applicable to the current (attached) image
* and the selected frame number are used by this method.
* @param layer index of the graphic layer, must be < getNumberOfGraphicLayers()
* @param idx index of the graphic object, must be < getNumberOfGraphicObjects(layer)
* @return a pointer to the graphic object
*/
DVPSGraphicObject *getGraphicObject(size_t layer, size_t idx);
/** creates a new graphic object on the given layer.
* Returns a pointer to the new graphic object.
* If the creation of the graphic object fails or if the graphic layer
* does not exist, NULL is returned.
* @param layer index of the graphic layer, must be < getNumberOfGraphicLayers()
* @param applicability defines to which images/frames the new object applies.
* Default: all images referenced by the presentation state.
* @return a pointer to the new graphic object
*/
DVPSGraphicObject *addGraphicObject(size_t layer,
DVPSObjectApplicability applicability=DVPSB_allImages);
/** deletes the graphic object with the given index
* on the given layer.
* Only the objects that are applicable to the current (attached) image
* and the selected frame number are used by this method.
* @param layer index of the graphic layer, must be < getNumberOfGraphicLayers()
* @param idx index of the graphic object, must be < getNumberOfGraphicObjects(layer)
* @return EC_Normal upon success, an error code otherwise
*/
OFCondition removeGraphicObject(size_t layer, size_t idx);
/** moves the graphic object with the given index on the given
* layer to a different layer.
* Only the objects that are applicable to the current (attached) image
* and the selected frame number are used by this method.
* @param old_layer index of the graphic layer on which the graphic object is,
* must be < getNumberOfGraphicLayers()
* @param idx index of the graphic object, must be < getNumberOfGraphicObjects(layer)
* @param new_layer index of the graphic layer to which the graphic object is moved,
* must be < getNumberOfGraphicLayers()
* @param applicability defines to which images/frames the new object applies from now on.
* Default: all images referenced by the presentation state.
* @return EC_Normal upon success, an error code otherwise
*/
OFCondition moveGraphicObject(size_t old_layer, size_t idx, size_t new_layer,
DVPSObjectApplicability applicability=DVPSB_allImages);
/** gets the curve with the given index
* on the given layer. If the curve or the graphic layer does
* not exist, NULL is returned.
* @param layer index of the graphic layer, must be < getNumberOfGraphicLayers()
* @param idx index of the curve, must be < getNumberOfCurves(layer)
* @return a pointer to the curve
*/
DVPSCurve *getCurve(size_t layer, size_t idx);
/** returns the number of curves in the attached image
* that could be activated in the presentation state.
* @return number of available curves
*/
size_t getNumberOfCurvesInImage();
/** gets the curve with the given index
* from the attached image. If the curve does
* not exist, NULL is returned.
* @param idx index of the curve, must be < getNumberOfCurvesInImage()
* @return a pointer to the curve
*/
DVPSCurve *getCurveInImage(size_t idx);
/** activates curve in presentation state.
* This method adds an activation for the given curve from the
* attached image to the given graphic layer in the presentation state.
* @param layer index of the graphic layer, must be < getNumberOfGraphicLayers()
* @param curveidxinimage index of the curve in the attached image,
* must be < getNumberOfCurvesInImage()
* @return EC_Normal upon success, an error code otherwise
*/
OFCondition addCurve(size_t layer, size_t curveidxinimage);
/** gets the overlay label of the given activated overlay.
* @param layer index of the graphic layer, must be < getNumberOfGraphicLayers()
* @param idx index of the overlay, must be < getNumberOfActiveOverlays().
* @return label string if it exists, NULL otherwise.
*/
const char *getActiveOverlayLabel(size_t layer, size_t idx);
/** gets the overlay description of the given activated overlay.
* @param layer index of the graphic layer, must be < getNumberOfGraphicLayers()
* @param idx index of the overlay, must be < getNumberOfActiveOverlays().
* @return description string if it exists, NULL otherwise.
*/
const char *getActiveOverlayDescription(size_t layer, size_t idx);
/** checks whether the given activated overlay is a ROI
* (region of interest) overlay.
* @param layer index of the graphic layer, must be < getNumberOfGraphicLayers()
* @param idx index of the overlay, must be < getNumberOfActiveOverlays().
* @return OFTrue if overlay exists and is ROI, OFFalse otherwise.
*/
OFBool activeOverlayIsROI(size_t layer, size_t idx);
/** gets one overlay bitmap.
* @param layer index of the graphic layer on which this overlay is
* activated, must be < getNumberOfGraphicLayers().
* @param idx index of the overlay activation on the given layer,
* must be < getNumberOfActiveOverlays(layer).
* @param overlayData upon success a pointer to the overlay plane is passed back
* in this parameter. The overlay plane is organized as one byte or one word per pixel.
* The byte/word values are already transformed from pvalues to DDLs.
* @param width upon success the width of the overlay bitmap in pixels is returned in this parameter.
* @param height upon success the height of the overlay bitmap in pixels is returned in this parameter.
* @param left_pos upon success the horizontal position of the overlay relative to the image
* is returned. 0 means that the overlay is left aligned with the image.
* Since the overlay is cropped at the borders of the image, values < 0 are impossible.
* @param top_pos upon success the vertical position of the overlay relative to the image
* is returned.
* @param isROI returns OFTrue if the overlay is ROI, OFFalse if the overlay is Graphic.
* @param fore returns value of foreground color (pvalue), all other values are transparent
* @param bits number of bits used for overlayData (valid: 8 or 12, default: 8). If bits is less than or
* equal to 8 the resulting overlayData is an array of 8 bit values, an array 16 bit values otherwise.
* @return EC_Normal upon success, an error code otherwise.
*/
OFCondition getOverlayData(
size_t layer,
size_t idx,
const void *&overlayData,
unsigned int &width,
unsigned int &height,
unsigned int &left_pos,
unsigned int &top_pos,
OFBool &isROI,
Uint16 &fore,
unsigned int bits = 8);
/** gets the number of overlays which are embedded in the
* image currently attached to the presentation state. Overlays in the image are counted only
* if they are not shadowed by overlays that are embedded in the presentation state
* and use the same repeating group number.
* @return number of overlays in attached image
*/
size_t getNumberOfOverlaysInImage();
/** gets the repeating group number of the given overlay in the attached image.
* @param idx index of the overlay, must be < getNumberOfOverlaysInImage().
* @return repeating group number if found, 0 otherwise.
*/
Uint16 getOverlayInImageGroup(size_t idx);
/** gets the overlay label of the given overlay in the attached image.
* @param idx index of the overlay, must be < getNumberOfOverlaysInImage().
* @return label string if it exists, NULL otherwise.
*/
const char *getOverlayInImageLabel(size_t idx);
/** gets the overlay description of the given overlay in the attached image.
* @param idx index of the overlay, must be < getNumberOfOverlaysInImage().
* @return description string if it exists, NULL otherwise.
*/
const char *getOverlayInImageDescription(size_t idx);
/** gets the index of the activation layer on which the given
* overlay from the attached image is activated.
* @param idx index of the overlay, must be < getNumberOfOverlaysInImage().
* @return layer index (which is < getNumberOfGraphicLayers()) if overlay exists
* and is activated, DVPS_IDX_NONE otherwise.
*/
size_t getOverlayInImageActivationLayer(size_t idx);
/** checks whether the given overlay in the attached image is a ROI
* (region of interest) overlay.
* @param idx index of the overlay, must be < getNumberOfOverlaysInImage().
* @return OFTrue if overlay exists and is ROI, OFFalse otherwise.
*/
OFBool overlayInImageIsROI(size_t idx);
/** removes an overlay from the presentation state.
* If the overlay is activated, the activation is also removed.
* Since overlays in the presentation state can shadow overlays in the attached image,
* execution of this method may change the number of overlays reported in the attached image.
* @param idx index of the overlay, must be < getNumberOfOverlaysInPresentationState().
* @return EC_Normal upon success, an error code otherwise.
*/
OFCondition removeOverlayFromPresentationState(size_t idx);
/** changes the repeating group used for an overlay in the presentation state.
* Since overlays in the presentation state can shadow overlays in the attached image,
* execution of this method may change the number of overlays reported in the attached image.
* @param idx index of the overlay, must be < getNumberOfOverlaysInPresentationState().
* @param newGroup new repeating group number 0x6000-0x601F (even). If this optional parameter is omitted,
* the method attemps to automatically determine a new group number so that no overlay in the
* attached image is shadowed any more. If this is impossible, the method fails and leaves
* the overlay repeating group unchanged.
* @return EC_Normal upon success, an error code otherwise.
*/
OFCondition changeOverlayGroupInPresentationState(size_t idx, Uint16 newGroup=0);
/** adds a new overlay bitmap to the presentation state.
* The overlay is read from a DICOM dataset which must contain the
* attributes required for a graphic or ROI overlay, see class DVPSOverlay.
* The dataset can be an image or standalone overlay IOD.
* The overlay data is copied into the presentation state, i.e. the DICOM dataset
* can be deleted after execution of this method.
* @param overlayIOD the DICOM dataset from which the overlay is to be read
* @param groupInItem the repeating group 0x6000..0x61F (even) of the overlay to be read
* @param newGroup repeating group number 0x6000-0x601F (even) to be used for
* the overlay in the presentation state. If this optional parameter is omitted,
* the method attemps to automatically determine a new group number so that no overlay in the
* attached image is shadowed any more. If this is impossible, a group number so far unused
* in the presentation state is taken.
* @return EC_Normal upon success, an error code otherwise.
*/
OFCondition addOverlayToPresentationState(DcmItem& overlayIOD, Uint16 groupInItem, Uint16 newGroup=0);
/** checks if an overlay from the presentation state is suitable
* for use as a bitmap shutter. An overlay is suitable if it is a graphic overlay
* with the same size as the attached image and with the origin 1\1.
* This method does not check wether the overlay is already activated as overlay
* or bitmap shutter.
* @param idx index of the overlay, must be < getNumberOfOverlaysInPresentationState().
* @return OFTrue if overlay can be used as display shutter.
*/
OFBool overlayIsSuitableAsBitmapShutter(size_t idx);
/** activates the given overlay from the attached image
* on the given graphic layer.
* If the overlay is already activated (i.e.
* getOverlayInImageActivationLayer(idx) != DVPS_IDX_NONE) this method fails.
* @param layer index of the graphic layer, must be < getNumberOfGraphicLayers()
* @param idx index of the overlay, must be < getNumberOfOverlaysInImage().
* @return EC_Normal upon success, an error code otherwise.
*/
OFCondition activateOverlayInImage(size_t layer, size_t idx);
/** activates the given overlay from the presentation state
* on the given graphic layer.
* If the overlay is already activated or used as a bitmap overlay (i.e.
* getOverlayInPresentationStateActivationLayer(idx) != DVPS_IDX_NONE or
* overlayIsBitmapShutter(idx) == OFTrue) this method fails.
* @param layer index of the graphic layer, must be < getNumberOfGraphicLayers()
* @param idx index of the overlay, must be < getNumberOfOverlaysInPresentationState().
* @return EC_Normal upon success, an error code otherwise.
*/
OFCondition activateOverlayInPresentationState(size_t layer, size_t idx);
/** activates an overlay as bitmap shutter.
* The overlay must not be activated on a graphic layer (i.e.
* getOverlayInPresentationStateActivationLayer(idx) != DVPS_IDX_NONE,
* otherwise this method fails.
* @param idx index of the overlay, must be < getNumberOfOverlaysInPresentationState().
* @return EC_Normal upon success, an error code otherwise.
*/
OFCondition activateOverlayAsBitmapShutter(size_t idx);
/** removes activation for an overlay which may be
* embedded in the attached image or part of the presentation state.
* @param layer index of the graphic layer on which this overlay is
* activated, must be < getNumberOfGraphicLayers().
* @param idx index of the overlay activation on the given layer,
* must be < getNumberOfActiveOverlays(layer).
* @return EC_Normal upon success, an error code otherwise.
*/
OFCondition deactivateOverlay(size_t layer, size_t idx);
/** attaches an image to the presentation state.
* If an image is already attached to the presentation state,
* the old image is detached (and freed if necessary) and the new image is attached.
* A preview image is created automatically (if values for preview resolution are valid).
* @param dataset pointer to the DICOM image as DcmDataset.
* @param transferOwnership if true, the presentation state assumes ownership
* of the passed DcmDataset, which is freed when a different image is attached
* or the presentation state is deleted.
* @return EC_Normal if successful, an error code otherwise. If an error code
* is returned, the presentation state has the same state as before the call
* to this method.
*/
OFCondition attachImage(DcmDataset *dataset, OFBool transferOwnership);
/** attaches an image to the presentation state.
* If an image is already attached to the presentation state,
* the old image is detached (and freed if necessary) and the new image is attached.
* A preview image is created automatically (if values for preview resolution are valid).
* @param fileformat pointer to the DICOM image as DcmFileFormat.
* @param transferOwnership if true, the presentation state assumes ownership
* of the passed DcmFileFormat, which is freed when a different image is attached
* or the presentation state is deleted.
* @return EC_Normal if successful, an error code otherwise. If an error code
* is returned, the presentation state has the same state as before the call
* to this method.
*/
OFCondition attachImage(DcmFileFormat *fileformat, OFBool transferOwnership);
/** detaches and frees the image (incl. preview) attached to the presentation state.
*/
void detachImage();
/** checks whether image is inverse (shape, plut or mono1).
* @return OFTrue if image is inverse, OFFalse otherwise.
*/
OFBool isInverse();
/** inverts image by changing presentation state LUT or presentation state LUT shape.
* Pixel data has to be re-get after this transformation.
* @return EC_Normal upon success, an error code otherwise.
*/
OFCondition invertImage();
/** applies presentation state to attached image and returns image bitmap.
* This method sets all parameter required to correctly render the pixel data
* in the image attached to the presentation state and then creates the
* required pixel data which contains all grayscale transformations but none
* of the none-grayscale transformations of the presentation state "burned in"
* into the pixel data. The pixel data returned is already corrected by a
* display transform for the current display device and can be mapped directly
* to digital driving levels of the graphics board. The pointer to the pixel
* data remains valid until the next call to this function, or until the
* image is detached or the presentation state is deleted.
* @param pixelData in this parameter a pointer to the pixel data is returned
* (array of 8 bit values). The storage area allocated for this pointer must
* not be freed by the caller. If the return value is an error code,
* no valid pixel data pointer may be assumed.
* @param width returns the width of the bitmap in pixels
* @param height returns the height of the bitmap in pixels
* @return EC_Normal upon success, an error code otherwise.
*/
OFCondition getPixelData(
const void *&pixelData,
unsigned long &width,
unsigned long &height);
/** same as method above apart from the fact that the storage area is handled
* externally.
* @param pixelData pointer to storage area where the pixel data is copied to
* (array of 8 bit values). The storage area must be allocated and deleted
* from the calling method.
* @param size specifies size of the storage area in bytes.
* @return EC_Normal upon success, an error code otherwise.
*/
OFCondition getPixelData(
void *pixelData,
unsigned long size);
/** returns the SOP Class UID of the currently attached image.
* @return SOP class UID of current image, NULL if absent
*/
const char *getAttachedImageSOPClassUID();
/** returns the SOP Instance UID of the currently attached image.
* @return SOP instance UID of current image, NULL if absent
*/
const char *getAttachedImageSOPInstanceUID();
/** gets the width of the attached image.
* The rotation status of the presentation state is not taken
* into account, i.e. the width of an unrotated image is returned.
* This method may only be called when an image is attached to the
* presentation state.
* @param width upon success, the image width (pixels) is returned in this parameter.
* @return EC_Normal upon success, an error code otherwise
*/
OFCondition getImageWidth(unsigned long &width);
/** gets the height of the attached image.
* The rotation status of the presentation state is not taken
* into account, i.e. the height of an unrotated image is returned.
* This method may only be called when an image is attached to the
* presentation state.
* @param height upon success, the image height (pixels) is returned in this parameter.
* @return EC_Normal upon success, an error code otherwise
*/
OFCondition getImageHeight(unsigned long &height);
/** gets number of bytes used for the print bitmap.
* (depends on width, height and depth)
* @return number of bytes used for the print bitmap
*/
unsigned long getPrintBitmapSize();
/** sets the minimum print bitmap width and height.
* Smaller images are scaled up by an appropriate integer factor. Both maximum
* values need to be twice greater than the maximum of the minimum values.
* @param width minimum width of print bitmap (in pixels)
* @param height minimum height of print bitmap (in pixels)
* @return EC_Normal upon success, an error code otherwise
*/
OFCondition setMinimumPrintBitmapWidthHeight(unsigned long width,
unsigned long height);
/** sets the maximum print bitmap width and height.
* Larger images are scaled down by an appropriate integer factor. Both maximum
* values need to be twice greater than the maximum of the minimum values.
* @param width maximum width of print bitmap (in pixels)
* @param height maximum height of print bitmap (in pixels)
* @return EC_Normal upon success, an error code otherwise
*/
OFCondition setMaximumPrintBitmapWidthHeight(unsigned long width,
unsigned long height);
/** gets width and height of print bitmap.
* Bitmap size depends on implicit scaling, a heuristic is used for very small images.
* The return values depend on the current minimum/maximum print bitmap width/height values!
* @param width upon success, the bitmap width (in pixels) is returned in this parameter
* @param height upon success, the bitmap height (in pixels) is returned in this parameter
* @return EC_Normal upon success, an error code otherwise
*/
OFCondition getPrintBitmapWidthHeight(unsigned long &width,
unsigned long &height);
/** gets width of print bitmap.
* Bitmap size depends on implicit scaling, a heuristic is used for very small images.
* The return value depends on the current minimum/maximum print bitmaps width/height values!
* @param width upon success, the image width (in pixels) is returned in this parameter
* @return EC_Normal upon success, an error code otherwise
*/
OFCondition getPrintBitmapWidth(unsigned long &width);
/** gets height of print bitmap.
* bitmap size depends on implicit scaling, a heuristic is used for very small images
* The return value depends on the current minimum/maximum print bitmaps width/height values!
* @param height upon success, the image height (in pixels) is returned in this parameter
* @return EC_Normal upon success, an error code otherwise
*/
OFCondition getPrintBitmapHeight(unsigned long &height);
/** gets the presentation pixel aspect ratio for the print bitmap.
* Pixel aspect ratio is defined here as the width of a pixel divided
* by the height of a pixel (x/y). The related image is already rotated and flipped!
* @return pixel aspect ratio
*/
double getPrintBitmapPixelAspectRatio();
/** gets requested image size for print bitmap.
* If the presentation state mode is DVPSD_trueSize, this method computes
* the true physical width (in mm) of the print image (under consideration of the
* rotation status) and writes it to the requestedImageSize string.
* @param requestedImageSize requested image size is written to this parameter upon
* successful return. Otherwise string is empty upon return.
* @return EC_Normal upon success, an error code otherwise
*/
OFCondition getPrintBitmapRequestedImageSize(OFString& requestedImageSize);
/** writes the bitmap data into the given buffer.
* The bitmap has the format: 12 bits stored and 16 bits allocated. This method is used
* to create the preformatted bitmap where the annotations are later burned in.
* Implicit scaling is performed if the bitmap is too small (see minimum bitmap size).
* The storage area must be allocated and deleted from the calling method.
* @param bitmap pointer to storage area where the pixel data is copied to.
* @param size specifies size of the storage area in bytes
* @param inversePLUT render inverse PLUT into bitmap if OFTrue (optional)
* @return EC_Normal upon success, an error code otherwise
*/
OFCondition getPrintBitmap(void *bitmap,
unsigned long size,
OFBool inversePLUT = OFFalse);
/** creates a new preview image based on the current image and pstate.
* The maximum size of this image is specified by the two parameters maxWidth and maxHeight.
* The actual size should be determined using one of the following appropriate methods (e.g.
* getPreviewImageWidthHeight) since the original pixel aspect ratio is alsways considered.
* The preview image includes all grayscale and spatial transformations performed on the
* current image so far. The method renderPixelData also renders the preview image (if existing).
* Therefore the preview image is always held consistent with the current image.
* Overlays, bitmapped shutters and any other annotations are not rendered into the preview image.
* @param maxWidth the maximum width used to create the preview image
* @param maxHeight the maximum height used to create the preview image
* @param clipMode specifies whether to clip the preview image to the displayed area (not implemented!)
* @return EC_Normal upon success, an error code otherwise
*/
OFCondition createPreviewImage(unsigned long maxWidth,
unsigned long maxHeight,
OFBool clipMode = OFFalse);
/** deletes and disables the current preview image.
*/
void deletePreviewImage();
/** gets number of bytes used for the preview image bitmap.
* (depends on width and height)
* @return number of bytes used for the preview image bitmap
*/
unsigned long getPreviewImageSize();
/** gets current width and height of the preview image.
* @param width upon success, the image width (in pixels) is returned in this parameter
* @param height upon success, the image height (in pixels) is returned in this parameter
* @return EC_Normal upon success, an error code otherwise
*/
OFCondition getPreviewImageWidthHeight(unsigned long &width,
unsigned long &height);
/** gets current width of the preview image.
* @param width upon success, the image width (in pixels) is returned in this parameter
* @return EC_Normal upon success, an error code otherwise
*/
OFCondition getPreviewImageWidth(unsigned long &width);
/** gets current height of the preview image.
* @param height upon success, the image height (in pixels) is returned in this parameter
* @return EC_Normal upon success, an error code otherwise
*/
OFCondition getPreviewImageHeight(unsigned long &height);
/** writes the bitmap data of the preview image into the given buffer.
* The storage area must be allocated and deleted from the calling method.
* @param bitmap pointer to storage area where the pixel data is copied to (array of 8 bit values)
* @param size specifies size of the storage area in bytes
* @return EC_Normal upon success, an error code otherwise
*/
OFCondition getPreviewImageBitmap(void *bitmap,
unsigned long size);
/** gets smallest and biggest possible pixel value in the attached image.
* These values are defined as the smallest and biggest number that
* could possibly be contained in the image after application of the Modality transform,
* but before any VOI, Presentation or display transform.
* This method may only be called when an image is attached to the
* presentation state.
* @param minValue upon success, the smallest value is returned in this parameter.
* @param maxValue upon success, the biggest value is returned in this parameter.
* @return EC_Normal upon success, an error code otherwise
*/
OFCondition getImageMinMaxPixelRange(double &minValue, double& maxValue);
/** gets smallest and biggest occuring pixel value in the attached image.
* These values are defined as the smallest and biggest number that
* are actually contained in the image after application of the Modality transform,
* but before any VOI, Presentation or display transform.
* This method may only be called when an image is attached to the
* presentation state.
* @param minValue upon success, the smallest value is returned in this parameter.
* @param maxValue upon success, the biggest value is returned in this parameter.
* @return EC_Normal upon success, an error code otherwise
*/
OFCondition getImageMinMaxPixelValue(double &minValue, double& maxValue);
/** gets the number of frames of the current (attached) image.
* This method may only be called when an image is attached to the
* presentation state.
* @param frames upon success, the number of frames is returned in this parameter.
* @return EC_Normal upon success, an error code otherwise
*/
OFCondition getImageNumberOfFrames(unsigned long &frames);
/** selects one frame of a multiframe image. This affects the image bitmap
* that is rendered, the overlay bitmaps and the visibility of graphic and text objects.
* This method may only be called when an image is attached to the
* presentation state.
* @param frame frame number in the range [1..getImageNumberOfFrames()]
* @return EC_Normal upon success, an error code otherwise
*/
OFCondition selectImageFrameNumber(unsigned long frame);
/** gets the index of the currently selected frame in a multi-frame image.
* @return index of the currently selected frame, 0 if an error occurred
*/
unsigned long getSelectedImageFrameNumber();
/** gets the currently selected display transform.
* Display transform will only be performed if switched on _and_
* a valid monitor characteristics description exists.
* Default after creation of a presentation state is "on".
* @return current display transform if on, DVPSD_none if off.
*/
DVPSDisplayTransform getDisplayTransform() { return displayTransform; }
/** activates or deactivates display correction.
* Display transform will only be performed if switched on
* _and_ a valid display function object exists.
* @param transform display transform to be set, DVPSD_none to switch off.
*/
void setDisplayTransform(DVPSDisplayTransform transform) { displayTransform = transform; }
/** converts a 16-bit P-Value to an 8-bit DDL value for on-sceen display.
* If a display function is set and enabled (see setDisplayTransform()),
* the DDL is corrected for the nonlinearity of the display, otherwise
* a simple linear mapping is performed. For 12-bit DDL values (hardcopy)
* the display function is automatically disabled.
* @param pvalue P-Value 0..0xFFFF
* @param bits number of bits used for the output DDL value (8 = softcopy, 12 = hardcopy)
* @return display driving level (DDL), 0..0xFF (8 bit) / 0..0xFFF (12 bit)
*/
Uint16 convertPValueToDDL(Uint16 pvalue, unsigned int bits = 8);
/** writes the patient module attributes and a source image sequence
* for a grayscale hardcopy image.
* Copies of the DICOM elements managed by this object are inserted into
* the DICOM dataset.
* @param dset the dataset to which the data is written
* @return EC_Normal if successful, an error code otherwise.
*/
OFCondition writeHardcopyImageAttributes(DcmItem &dset);
/** gets the modality of the attached image.
* @return modality string if it exists, NULL or empty string otherwise.
*/
const char *getCurrentImageModality();
/** tries to find an overlay repeating group that is not used in the
* presentation state or the attached image. If that does not exist,
* it returns a group number that is unused in the presentation state
* but used in the image.
* @param currentGroup the current group number of the overlay
* to be changed (if any)
* @return group number 0x6000..0x601F if found, 0 otherwise.
*/
Uint16 findOverlayGroup(Uint16 currentGroup=0);
/** prepares pixel data for image and overlays for access.
* This method is called internally before any image pixel data
* or overlay bitmaps is created. It makes sure that the following settings
* of the presentation state are reflected in the dcmimage-based
* image processing routines: VOI transformation, Presentation LUT,
* rotation, flip, overlay activation.
* @param display use current display function if OFTrue, don't use otherwise
*/
void renderPixelData(OFBool display = OFTrue);
/** attempts to find the displayed area selection for the
* current image and frame. If not found, creates a default.
* @return displayed area selection item. If creation of a default failed
* or no image is attached to the presentation state, returns NULL.
*/
DVPSDisplayedArea *getDisplayedAreaSelection();
/** attempts to find the Softcopy VOI LUT item for the
* current image and frame. If not found, returns NULL.
* @return softcopy VOI LUT item for current image and frame if found, NULL otherwise
*/
DVPSSoftcopyVOI *getCurrentSoftcopyVOI();
private:
/// private undefined copy constructor
DVPresentationState(const DVPresentationState& other);
/// private undefined assignment operator
DVPresentationState& operator=(const DVPresentationState& other);
/** helper method that activates the given overlay in the given image
* @param ovl overlay to activate
* @param image image to be rendered
* @param asShutter true if overlay should be used as bitmap shutter
* @param pvalue pvalue for overlay foreground
* @return EC_Normal if successful, an error code otherwise
*/
static OFCondition activateOverlayHelper(
DVPSOverlay& ovl,
DicomImage &image,
OFBool asShutter = OFFalse,
Uint16 pvalue = 0);
/* connection with dcmimage */
/** a pointer to the DICOM dataset comprising the image
* to which the presentation state is currently applied
*/
DcmDataset *currentImageDataset;
/** a pointer to the fileformat (if it exists) of the
* DICOM dataset comprising the image to which the
* presentation state is currently applied
*/
DcmFileFormat *currentImageFileformat;
/** a pointer to the dcmimage representation of the
* image to which the presentation state is currently applied
*/
DicomImage *currentImage;
/** a pointer to the dcmimage representation of the (smaller) preview
* image to which the presentation state is currently applied
*/
DicomImage *previewImage;
/** contains the width of the attached image without consideration of rotation.
*/
unsigned long currentImageWidth;
/** contains the height of the attached image without consideration of rotation.
*/
unsigned long currentImageHeight;
/** contains the width of the attached image after pixel data have been rendered (w/o clipping).
*/
unsigned long renderedImageWidth;
/** contains the height of the attached image after pixel data have been rendered (w/o clipping).
*/
unsigned long renderedImageHeight;
/** contains the top hand corner of the attached image after pixel data have been rendered.
*/
signed long renderedImageTop;
/** contains the left hand corner of the attached image after pixel data have been rendered.
* (the following equation is always true: renderedImageTop <= renderedImageBottom)
*/
signed long renderedImageLeft;
/** contains the bottom hand corner of the attached image after pixel data have been rendered.
* (the following equation is always true: renderedImageLeft <= renderedImageRight)
*/
signed long renderedImageBottom;
/** contains the right hand corner of the attached image after pixel data have been rendered.
*/
signed long renderedImageRight;
/** contains the SOP Class UID of the attached image
*/
char *currentImageSOPClassUID;
/** contains the SOP Instance UID of the attached image
*/
char *currentImageSOPInstanceUID;
/** contains the current selected frame number of the attached image.
* Frame numbers are counted from 1 (like in DICOM, unlike dcmimgle).
*/
unsigned long currentImageSelectedFrame;
/** a flag describing whether the presentation state is owner of
* the DICOM dataset in currentImageDataset/currentImageFileformat.
* If the presentation state is owner, it will delete the dataset
* upon its own destruction or attachment of a different image.
*/
OFBool currentImageOwned;
/** a flag describing whether the VOI settings in currentImage
* match the ones in the presentation state.
*/
OFBool currentImageVOIValid;
/** a flag describing whether the presentation LUT settings
* in currentImage match the ones in the presentation state.
*/
OFBool currentImagePLUTValid;
/** a flag describing whether currentImage has been flipped
*/
OFBool currentImageFlip;
/** a flag describing the current rotation angle of currentImage
*/
DVPSRotationType currentImageRotation;
/** a flag describing whether the Overlay settings in
* currentImage match the ones in the presentation state.
* values: 0=invalid, 1=invalid, but no external overlay added, 2=valid
*/
int currentImageOverlaysValid;
/** list of curves of the currently attached image
*/
DVPSCurve_PList currentImageCurveList;
/** list of VOI LUTs of the currently attached image
*/
DVPSVOILUT_PList currentImageVOILUTList;
/** list of VOI Windows of the currently attached image
*/
DVPSVOIWindow_PList currentImageVOIWindowList;
/** modality of currently attached image (if any)
*/
DcmCodeString currentImageModality;
/** true if attached image is MONOCHROME1
*/
OFBool currentImageMonochrome1;
/** flag indicating the currently selected display transform
* DVPSD_none if switched off
*/
DVPSDisplayTransform displayTransform;
/** a flag describing whether current image is inverse
*/
OFBool imageInverse;
/** reference to list of display functions if existing
*/
DiDisplayFunction **displayFunction;
/** minimum width of print bitmap (used for implicit scaling)
*/
unsigned long minimumPrintBitmapWidth;
/** minimum height of print bitmap (used for implicit scaling)
*/
unsigned long minimumPrintBitmapHeight;
/** maximum width of print bitmap (used for implicit scaling)
*/
unsigned long maximumPrintBitmapWidth;
/** maximum height of print bitmap (used for implicit scaling)
*/
unsigned long maximumPrintBitmapHeight;
/** maximum width of (optional) preview image
*/
unsigned long maximumPreviewImageWidth;
/** maximum height of (optional) preview image
*/
unsigned long maximumPreviewImageHeight;
};
#endif