Medical Imaging Interaction Toolkit  2024.12.00
Medical Imaging Interaction Toolkit
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
mitkImagePixelWriteAccessor.h
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 
13 #ifndef mitkImagePixelWriteAccessor_h
14 #define mitkImagePixelWriteAccessor_h
15 
16 #include "mitkImagePixelAccessor.h"
17 #include "mitkImageWriteAccessor.h"
18 
19 namespace mitk
20 {
29  template <class TPixel, unsigned int VDimension = 3>
30  class ImagePixelWriteAccessor : public ImagePixelAccessor<TPixel, VDimension>
31  {
32  friend class Image;
33 
34  public:
37 
55  const ImageDataItem *iDI = nullptr,
56  int OptionFlags = ImageAccessorBase::DefaultBehavior)
57  : ImagePixelAccessor<TPixel, VDimension>(iP.GetPointer(), iDI), m_WriteAccessor(iP, iDI, OptionFlags)
58  {
59  }
60 
62  virtual inline TPixel *GetData() const { return static_cast<TPixel *>(m_WriteAccessor.m_AddressBegin); }
64  void SetPixelByIndex(const itk::Index<VDimension> &idx, const TPixel &value)
65  {
66  unsigned int offset = ImagePixelAccessor<TPixel, VDimension>::GetOffset(idx);
67 
68  *(((TPixel *)m_WriteAccessor.m_AddressBegin) + offset) = value;
69  }
70 
72  void SetPixelByIndexSafe(const itk::Index<VDimension> &idx, const TPixel &value)
73  {
74  unsigned int offset = ImagePixelAccessorType::GetOffset(idx);
75 
76  TPixel *targetAddress = ((TPixel *)m_WriteAccessor.m_AddressBegin) + offset;
77 
78  if (targetAddress >= m_WriteAccessor.m_AddressBegin && targetAddress < m_WriteAccessor.m_AddressEnd)
79  {
80  *targetAddress = value;
81  }
82  else
83  {
84  // printf("image dimensions = %d, %d, %d\n", imageDims[0], imageDims[1], imageDims[2]);
85  // printf("m_AddressBegin: %p, m_AddressEnd: %p, offset: %u\n", m_WriteAccessor.m_AddressBegin,
86  // m_WriteAccessor.m_AddressEnd, offset);
87  mitkThrow() << "ImageAccessor Overflow: image access exceeds the requested image area at " << idx << ".";
88  }
89  }
90 
92  const TPixel &GetPixelByIndex(const itk::Index<VDimension> &idx) const
93  {
94  unsigned int offset = ImagePixelAccessorType::GetOffset(idx);
95 
96  return *(((TPixel *)m_WriteAccessor.m_AddressBegin) + offset);
97  }
98 
102  const TPixel &GetPixelByIndexSafe(const itk::Index<VDimension> &idx) const
103  {
104  unsigned int offset = ImagePixelAccessorType::GetOffset(idx);
105 
106  TPixel *targetAddress = ((TPixel *)m_WriteAccessor.m_AddressBegin) + offset;
107 
108  if (!(targetAddress >= m_WriteAccessor.m_AddressBegin && targetAddress < m_WriteAccessor.m_AddressEnd))
109  {
110  mitkThrow() << "ImageAccessor Overflow: image access exceeds the requested image area at " << idx << ".";
111  }
112 
113  return *targetAddress;
114  }
115 
120  {
121  itk::Index<3> itkIndex;
122  m_WriteAccessor.GetImage()->GetGeometry()->WorldToIndex(position, itkIndex);
123 
124  return GetPixelByIndex(itkIndex);
125  }
126 
128  void SetPixelByWorldCoordinates(const mitk::Point3D &, const TPixel &value, unsigned int timestep = 0);
129 
131  private:
132  ImageWriteAccessor m_WriteAccessor;
133 
134  ImagePixelWriteAccessor &operator=(const ImagePixelWriteAccessor &); // Not implemented on purpose.
136  };
137 }
138 #endif
mitk::ImagePixelWriteAccessor::GetData
virtual TPixel * GetData() const
Gives full data access.
Definition: mitkImagePixelWriteAccessor.h:62
mitk::ImageWriteAccessor::GetImage
const Image * GetImage() const override
mitk::ImagePixelAccessor::GetOffset
unsigned int GetOffset(const IndexType &idx) const
Definition: mitkImagePixelAccessor.h:117
mitk::ImageWriteAccessor
ImageWriteAccessor class to get locked write-access for a particular image part.
Definition: mitkImageWriteAccessor.h:25
mitk::ImageAccessorBase::DefaultBehavior
@ DefaultBehavior
Definition: mitkImageAccessorBase.h:69
mitk::ImageDataItem
Internal class for managing references on sub-images.
Definition: mitkImageDataItem.h:43
mitk::ImagePixelWriteAccessor::SetPixelByIndex
void SetPixelByIndex(const itk::Index< VDimension > &idx, const TPixel &value)
Sets a pixel value at given index.
Definition: mitkImagePixelWriteAccessor.h:64
mitk::Image
Image class for storing images.
Definition: mitkImage.h:69
itk::SmartPointer
Definition: mitkIFileReader.h:30
mitk::ImagePixelWriteAccessor::GetPixelByIndexSafe
const TPixel & GetPixelByIndexSafe(const itk::Index< VDimension > &idx) const
Definition: mitkImagePixelWriteAccessor.h:102
mitk::ImagePixelWriteAccessor::ImagePixelWriteAccessor
ImagePixelWriteAccessor(ImagePointer iP, const ImageDataItem *iDI=nullptr, int OptionFlags=ImageAccessorBase::DefaultBehavior)
Instantiates a mitk::ImageWriteAccessor (see its doxygen page for more details)
Definition: mitkImagePixelWriteAccessor.h:54
mitkImageWriteAccessor.h
mitk::ImagePixelWriteAccessor::SetPixelByWorldCoordinates
void SetPixelByWorldCoordinates(const mitk::Point3D &, const TPixel &value, unsigned int timestep=0)
mitk
Find image slices visible on a given plane.
Definition: RenderingTests.dox:1
mitk::ImagePixelWriteAccessor::ImagePointer
itk::SmartPointer< mitk::Image > ImagePointer
Definition: mitkImagePixelWriteAccessor.h:36
mitk::Point< ScalarType, 3 >
mitk::ImageAccessorBase::m_AddressEnd
void * m_AddressEnd
Definition: mitkImageAccessorBase.h:114
mitk::ImagePixelAccessor
Provides templated image access for all inheriting classes.
Definition: mitkImagePixelAccessor.h:30
mitkThrow
#define mitkThrow()
Definition: mitkExceptionMacro.h:27
mitk::ImagePixelWriteAccessor::SetPixelByIndexSafe
void SetPixelByIndexSafe(const itk::Index< VDimension > &idx, const TPixel &value)
Definition: mitkImagePixelWriteAccessor.h:72
mitk::ImagePixelWriteAccessor
Gives locked and index-based write access for a particular image part. The class provides several set...
Definition: mitkImagePixelWriteAccessor.h:30
mitk::ImagePixelWriteAccessor::GetPixelByWorldCoordinates
const TPixel & GetPixelByWorldCoordinates(mitk::Point3D position)
Definition: mitkImagePixelWriteAccessor.h:119
mitk::BaseData::GetGeometry
mitk::BaseGeometry * GetGeometry(int t=0) const
Return the geometry, which is a TimeGeometry, of the data as non-const pointer.
Definition: mitkBaseData.h:121
mitk::BaseGeometry::WorldToIndex
void WorldToIndex(const mitk::Point3D &pt_mm, mitk::Point3D &pt_units) const
Convert world coordinates (in mm) of a point to (continuous!) index coordinates.
mitkImagePixelAccessor.h
mitk::ImagePixelWriteAccessor::ImagePixelAccessorType
ImagePixelAccessor< TPixel, VDimension > ImagePixelAccessorType
Definition: mitkImagePixelWriteAccessor.h:35
mitk::ImagePixelWriteAccessor::GetPixelByIndex
const TPixel & GetPixelByIndex(const itk::Index< VDimension > &idx) const
Definition: mitkImagePixelWriteAccessor.h:92
mitk::ImageAccessorBase::m_AddressBegin
void * m_AddressBegin
Definition: mitkImageAccessorBase.h:111
mitk::ImagePixelWriteAccessor::~ImagePixelWriteAccessor
~ImagePixelWriteAccessor() override
Definition: mitkImagePixelWriteAccessor.h:130