/usr/include/dcmtk/dcmrt/drmimage.h is in libdcmtk-dev 3.6.2-3build3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 | /*
*
* Copyright (C) 2012-2016, 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: dcmrt
*
* Author: Uli Schlachter
*
* Purpose: Mid-Level API for RT Image objects
*
*/
#ifndef DRMIMAGE_H
#define DRMIMAGE_H
#include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */
#include "dcmtk/dcmrt/drtimage.h"
#include "dcmtk/dcmimgle/dcmimage.h"
/**
* Helper class for working with radio therapy image objects. This class provides
* a binding between DicomImage and DRTImageIOD. The information from the
* dataset are managed by the DRTImageIOD base class, but the image itself is
* represented through DicomImage.
*
* @note These functions hopefully simplify working with DRTImageIOD. This is a
* work in progress, please propose any improvements which would make working
* with this class easier for you and that your consider useful.
*/
class DCMTK_DCMRT_EXPORT DRTImage : public DRTImageIOD
{
public:
/** Default constructor */
DRTImage();
/** Destructor */
~DRTImage();
/** Load an object from a file
* @param fileName name of the file to load (may contain wide chars if support enabled).
* Since there are various constructors for the OFFilename class, a "char *", "OFString"
* or "wchar_t *" can also be passed directly to this parameter.
* @param readMode read file with or without meta header, i.e. as a fileformat or a
* dataset. Use ERM_fileOnly in order to force the presence of a meta header.
* @param readXfer transfer syntax used to read the data (auto detection if EXS_Unknown)
* @return status, EC_Normal if successful, an error code otherwise
*/
virtual OFCondition loadFile(const OFFilename &fileName,
const E_FileReadMode readMode = ERM_autoDetect,
const E_TransferSyntax readXfer = EXS_Unknown);
/** Load an RT Image from a given dataset. Please note that this DRTImage
* instance assumes ownership of the dataset pointer and will delete it
* when done with it. You must not delete it yourself. This applies even
* when the function returns an error.
* @param dataset DICOM dataset from which the RT Image should be read
* @return status, EC_Normal if successful, an error code otherwise
*/
virtual OFCondition read(DcmItem *dataset);
/** Get the DicomImage instance for this RT Image.
* @return the DicomImage instance for this RT Image, may be NULL!
*/
DicomImage *getImage() { return image_; }
/** Get the DicomImage instance for this RT Image.
* @return the DicomImage instance for this RT Image, may be NULL!
*/
const DicomImage *getImage() const { return image_; }
/** Get the number of pixels in one row
* @return number of pixels in one row
*/
unsigned long getWidth() const
{
return (image_ != NULL) ? image_->getWidth() : 0;
}
/** Get the number of pixels in one column
* @return number of pixels in one column
*/
unsigned long getHeight() const
{
return (image_ != NULL) ? image_->getHeight() : 0;
}
/** Get the number of bits per sample of the internal representation
* @return number of bits per sample of the internal representation
*/
int getDepth() const
{
return (image_ != NULL) ? image_->getDepth() : 0;
}
/** Get the number of frames
* @return number of frames
*/
unsigned long getFrameCount() const
{
return (image_ != NULL) ? image_->getFrameCount() : 0;
}
/** Get the current status code
* @return current status code
*/
EI_Status getStatus() const
{
return (image_ != NULL) ? image_->getStatus() : EIS_InvalidImage;
}
/** render pixel data and return result as a memory buffer.
* apply VOI/PLUT transformation and (visible) overlay planes.
* The rendered pixel data is alway unsigned.
* @param result OFVector to fill with resulting frame's data
* @param frame number of frame to be rendered (0..n-1)
* @return EC_Normal if successful, else an error code
*/
OFCondition getOutputData(OFVector<Uint8>& result, const unsigned long frame = 0);
/** unset all VOI transformations (windows and LUTs).
*
* @return EC_Normal if successful, else an error code
*/
OFCondition setNoVoiTransformation()
{
if (image_ == NULL)
return EC_Normal;
return statusToCondition(image_->setNoVoiTransformation());
}
/** set automatically calculated minimum/maximum window.
* possibly active VOI LUT is implicitly disabled.
* Please note that the min/max values refer to the full pixel data (i.e. including
* all possible present frames).
*
** @param idx ignore global min/max values if true (1)
*
* @return EC_Normal if successful, else an error code
*/
OFCondition setMinMaxWindow(const int idx = 0)
{
if (image_ == NULL)
return EC_Normal;
return statusToCondition(image_->setMinMaxWindow(idx));
}
/** set automatically calculated histogram window.
* possibly active VOI LUT is implicitly disabled.
*
** @param thresh threshold value specifying percentage of histogram border which
* shall be ignored (default: 5%).
*
* @return EC_Normal if successful, else an error code
*/
OFCondition setHistogramWindow(const double thresh = 0.05)
{
if (image_ == NULL)
return EC_Normal;
return statusToCondition(image_->setHistogramWindow(thresh));
}
/** set automatically calculated VOI window for the specified Region of Interest (ROI).
* The ROI is specified by means of a rectangle (left, top, width, height). Only the part
* of the ROI that overlaps with the image is regarded - if the overlapping area is empty
* this method returns an error.
* Possibly active VOI LUT is implicitly disabled.
*
** @param left_pos x-coordinate of the top left-hand corner of the ROI (starting from 0)
* @param top_pos y-coordinate of the top left-hand corner of the ROI (starting from 0)
* @param width width in pixels of the rectangular ROI (minimum: 1)
* @param height height in pixels of the rectangular ROI (minimum: 1)
* @param frame index of the frame to be used for calculation (default: 0 = first)
*
* @return EC_Normal if successful, else an error code
*/
OFCondition setRoiWindow(const unsigned long left_pos,
const unsigned long top_pos,
const unsigned long width,
const unsigned long height,
const unsigned long frame = 0)
{
if (image_ == NULL)
return EC_Normal;
return statusToCondition(image_->setRoiWindow(left_pos, top_pos, width, height, frame));
}
/** set specified window (given by window width and center).
* possibly active VOI LUT is implicitly disabled.
*
** @param center center of specified window
* @param width width of specified window (> 0.0)
*
* @return EC_Normal if successful, else an error code
*/
OFCondition setWindow(const double center,
const double width)
{
if (image_ == NULL)
return EC_Normal;
return statusToCondition(image_->setWindow(center, width));
}
/** get current window center and width values
*
** @param center return current window center value
* @param width return current window width value
*
* @return EC_Normal if successful, else an error code
*/
OFCondition getWindow(double ¢er,
double &width)
{
center = 0;
width = 0;
if (image_ == NULL)
return EC_Normal;
return statusToCondition(image_->getWindow(center, width));
}
/**
* Clear all internal state.
*/
virtual void clear();
private:
/// Reset this class image and DICOM object members
virtual void reset();
/** hide DRTImageIOD::read(). DicomImage() doesn't allow the dataset that was
* used for loading the image to be deleted. Thus, read() cannot work.
* @return always returns EC_IllegalCall since this method should not be called
*/
virtual OFCondition read(DcmItem & /*dataset*/)
{
return EC_IllegalCall;
}
/** turn a status code from DicomImage into an OFCondition object.
* @param status status code
* @return OFCondition instance for the given status
*/
OFCondition statusToCondition(int status)
{
if (status)
return EC_Normal;
// This is our new "unknown error" OFCondition
return RT_EC_UnsupportedValue;
}
/** undefined private copy constructor */
DRTImage(const DRTImage &);
/** undefined private assignment operator */
DRTImage &operator=(const DRTImage &);
/// File format that was used when last loading an image
DcmFileFormat format_;
/// Dataset that image_ is using, or NULL if it uses format_
DcmItem *dataset_;
/// DicomImage instance representing the image
DicomImage *image_;
};
#endif
|