24#ifndef _SEIMPLEMENTATION_IMAGE_WRITEABLEIMAGEINTERFACETRAITS_H_
25#define _SEIMPLEMENTATION_IMAGE_WRITEABLEIMAGEINTERFACETRAITS_H_
44 class WriteableIterator;
46 class WriteableSetter {
52 friend class WriteableIterator;
59 m_image->setValue(m_x, m_y,
v);
64 v += m_accessor.getValue(m_x, m_y);
65 m_image->setValue(m_x, m_y,
v);
70 return m_accessor.getValue(m_x, m_y);
74 class WriteableIterator :
std::iterator<std::forward_iterator_tag, WriteableInterfaceType::PixelType> {
85 : m_image{
image}, m_accessor{
image}, m_x{0}, m_y{0},
86 m_width{
image->getWidth()},
87 m_height{
image->getHeight()},
88 m_setter{
image, 0, 0} {
96 return m_x != b.m_x || m_y != b.m_y || m_width != b.m_width || m_height != b.m_height || m_image != b.m_image;
100 if (m_y < m_height) {
102 if (m_x >= m_width) {
105 if (m_y >= m_height) {
127 return image->getWidth();
131 return image->getHeight();
135 return WriteableSetter(
image,
x,
y);
144 return WriteableIterator{
image};
148 return WriteableIterator{
image, 0};
#define INTERP_MAXKERNELWIDTH
std::shared_ptr< DependentParameter< std::shared_ptr< EngineParameter > > > x
std::shared_ptr< DependentParameter< std::shared_ptr< EngineParameter > > > y
WriteableInterfaceTypePtr m_image
WriteableSetter & operator*()
bool operator!=(const WriteableIterator &b) const
WriteableIterator & operator++()
WriteableIterator(WriteableInterfaceTypePtr image)
SourceXtractor::ImageAccessor< WriteableInterfaceType::PixelType > m_accessor
WriteableIterator(WriteableInterfaceTypePtr image, int)
SourceXtractor::ImageAccessor< WriteableInterfaceType::PixelType > m_accessor
WriteableInterfaceType::PixelType operator+=(WriteableInterfaceType::PixelType v)
WriteableInterfaceTypePtr m_image
WriteableSetter(WriteableInterfaceTypePtr &image, int x, int y)
WriteableInterfaceType::PixelType operator=(WriteableInterfaceType::PixelType v)
std::shared_ptr< WriteableInterfaceType > WriteableInterfaceTypePtr
SourceXtractor::WriteableImage< SourceXtractor::SeFloat > WriteableInterfaceType
WriteableIterator iterator
static WriteableSetter at(WriteableInterfaceTypePtr &image, std::size_t x, std::size_t y)
static double getClamped(const WriteableInterfaceTypePtr &image, int x, int y)
static iterator end(const WriteableInterfaceTypePtr &image)
static iterator begin(const WriteableInterfaceTypePtr &image)
static void shiftResize(const WriteableInterfaceTypePtr &source, WriteableInterfaceTypePtr &window, double scale_factor, double x_shift, double y_shift)
static std::size_t width(const WriteableInterfaceTypePtr &image)
static WriteableInterfaceTypePtr factory(std::size_t width, std::size_t height)
static std::size_t height(const WriteableInterfaceTypePtr &image)
static void shiftResizeLancszos(const WriteableInterfaceTypePtr &source, WriteableInterfaceTypePtr &window, double scale_factor, double x_shift, double y_shift)
static ImageInterfaceType::PixelType at(const WriteableInterfaceTypePtr &image, std::size_t x, std::size_t y)
static std::size_t height(ImageType &image)
static std::size_t width(ImageType &image)
static void addImageToImage(ImageType &image1, const ImageType &image2, double scale, double x, double y)
static double & at(ImageType &image, std::size_t x, std::size_t y)