# HG changeset patch # User Sebastien Jodogne # Date 1538754362 -7200 # Node ID 9b4251721f2201ad7c1ab2970ce0552d83b41920 # Parent 482631e4e290741edfa50b4b18abef74004cfd5d ImageAccessor now non-copyable diff -r 482631e4e290 -r 9b4251721f22 Core/Images/Image.cpp --- a/Core/Images/Image.cpp Wed Oct 03 16:13:19 2018 +0200 +++ b/Core/Images/Image.cpp Fri Oct 05 17:46:02 2018 +0200 @@ -45,7 +45,9 @@ bool forceMinimalPitch) : image_(format, width, height, forceMinimalPitch) { - ImageAccessor accessor = image_.GetAccessor(); + ImageAccessor accessor; + image_.GetWriteableAccessor(accessor); + AssignWritable(format, width, height, accessor.GetPitch(), accessor.GetBuffer()); } diff -r 482631e4e290 -r 9b4251721f22 Core/Images/ImageAccessor.cpp --- a/Core/Images/ImageAccessor.cpp Wed Oct 03 16:13:19 2018 +0200 +++ b/Core/Images/ImageAccessor.cpp Fri Oct 05 17:46:02 2018 +0200 @@ -247,10 +247,11 @@ - ImageAccessor ImageAccessor::GetRegion(unsigned int x, - unsigned int y, - unsigned int width, - unsigned int height) const + void ImageAccessor::GetRegion(ImageAccessor& accessor, + unsigned int x, + unsigned int y, + unsigned int width, + unsigned int height) const { if (x + width > width_ || y + height > height_) @@ -258,12 +259,10 @@ throw OrthancException(ErrorCode_ParameterOutOfRange); } - ImageAccessor result; - if (width == 0 || height == 0) { - result.AssignWritable(format_, 0, 0, 0, NULL); + accessor.AssignWritable(format_, 0, 0, 0, NULL); } else { @@ -273,15 +272,13 @@ if (readOnly_) { - result.AssignReadOnly(format_, width, height, pitch_, p); + accessor.AssignReadOnly(format_, width, height, pitch_, p); } else { - result.AssignWritable(format_, width, height, pitch_, p); + accessor.AssignWritable(format_, width, height, pitch_, p); } } - - return result; } diff -r 482631e4e290 -r 9b4251721f22 Core/Images/ImageAccessor.h --- a/Core/Images/ImageAccessor.h Wed Oct 03 16:13:19 2018 +0200 +++ b/Core/Images/ImageAccessor.h Fri Oct 05 17:46:02 2018 +0200 @@ -37,10 +37,11 @@ #include #include +#include namespace Orthanc { - class ImageAccessor + class ImageAccessor : public boost::noncopyable { private: template @@ -142,10 +143,11 @@ void ToMatlabString(std::string& target) const; - ImageAccessor GetRegion(unsigned int x, - unsigned int y, - unsigned int width, - unsigned int height) const; + void GetRegion(ImageAccessor& accessor, + unsigned int x, + unsigned int y, + unsigned int width, + unsigned int height) const; void SetFormat(PixelFormat format); }; diff -r 482631e4e290 -r 9b4251721f22 Core/Images/ImageBuffer.cpp --- a/Core/Images/ImageBuffer.cpp Wed Oct 03 16:13:19 2018 +0200 +++ b/Core/Images/ImageBuffer.cpp Fri Oct 05 17:46:02 2018 +0200 @@ -140,24 +140,18 @@ } } - - ImageAccessor ImageBuffer::GetAccessor() + + void ImageBuffer::GetReadOnlyAccessor(ImageAccessor& accessor) { Allocate(); + accessor.AssignReadOnly(format_, width_, height_, pitch_, buffer_); + } + - ImageAccessor accessor; - accessor.AssignWritable(format_, width_, height_, pitch_, buffer_); - return accessor; - } - - - ImageAccessor ImageBuffer::GetConstAccessor() + void ImageBuffer::GetWriteableAccessor(ImageAccessor& accessor) { Allocate(); - - ImageAccessor accessor; - accessor.AssignReadOnly(format_, width_, height_, pitch_, buffer_); - return accessor; + accessor.AssignWritable(format_, width_, height_, pitch_, buffer_); } diff -r 482631e4e290 -r 9b4251721f22 Core/Images/ImageBuffer.h --- a/Core/Images/ImageBuffer.h Wed Oct 03 16:13:19 2018 +0200 +++ b/Core/Images/ImageBuffer.h Fri Oct 05 17:46:02 2018 +0200 @@ -101,9 +101,9 @@ return ::Orthanc::GetBytesPerPixel(format_); } - ImageAccessor GetAccessor(); + void GetReadOnlyAccessor(ImageAccessor& accessor); - ImageAccessor GetConstAccessor(); + void GetWriteableAccessor(ImageAccessor& accessor); bool IsMinimalPitchForced() const { diff -r 482631e4e290 -r 9b4251721f22 Core/Images/JpegReader.h --- a/Core/Images/JpegReader.h Wed Oct 03 16:13:19 2018 +0200 +++ b/Core/Images/JpegReader.h Fri Oct 05 17:46:02 2018 +0200 @@ -48,13 +48,10 @@ #include "ImageAccessor.h" #include -#include namespace Orthanc { - class JpegReader : - public ImageAccessor, - public boost::noncopyable + class JpegReader : public ImageAccessor { private: std::string content_; diff -r 482631e4e290 -r 9b4251721f22 Core/Images/PamReader.h --- a/Core/Images/PamReader.h Wed Oct 03 16:13:19 2018 +0200 +++ b/Core/Images/PamReader.h Fri Oct 05 17:46:02 2018 +0200 @@ -39,13 +39,9 @@ # error The macro ORTHANC_SANDBOXED must be defined #endif -#include - namespace Orthanc { - class PamReader : - public ImageAccessor, - public boost::noncopyable + class PamReader : public ImageAccessor { private: void ParseContent(); diff -r 482631e4e290 -r 9b4251721f22 Core/Images/PngReader.h --- a/Core/Images/PngReader.h Wed Oct 03 16:13:19 2018 +0200 +++ b/Core/Images/PngReader.h Fri Oct 05 17:46:02 2018 +0200 @@ -48,7 +48,6 @@ #include #include #include -#include #if !defined(ORTHANC_SANDBOXED) # error The macro ORTHANC_SANDBOXED must be defined @@ -56,9 +55,7 @@ namespace Orthanc { - class PngReader : - public ImageAccessor, - public boost::noncopyable + class PngReader : public ImageAccessor { private: struct PngRabi; diff -r 482631e4e290 -r 9b4251721f22 UnitTestsSources/FromDcmtkTests.cpp --- a/UnitTestsSources/FromDcmtkTests.cpp Wed Oct 03 16:13:19 2018 +0200 +++ b/UnitTestsSources/FromDcmtkTests.cpp Fri Oct 05 17:46:02 2018 +0200 @@ -191,17 +191,20 @@ img.SetHeight(256); img.SetFormat(PixelFormat_Grayscale16); + ImageAccessor accessor; + img.GetWriteableAccessor(accessor); + uint16_t v = 0; for (unsigned int y = 0; y < img.GetHeight(); y++) { - uint16_t *p = reinterpret_cast(img.GetAccessor().GetRow(y)); + uint16_t *p = reinterpret_cast(accessor.GetRow(y)); for (unsigned int x = 0; x < img.GetWidth(); x++, p++, v++) { *p = v; } } - o.EmbedImage(img.GetAccessor()); + o.EmbedImage(accessor); o.SaveToFile("UnitTestsResults/png4.dcm"); } } @@ -866,9 +869,12 @@ } } - Orthanc::ImageAccessor r = image.GetRegion(32, 32, 64, 192); - Orthanc::ImageProcessing::Set(r, 0); - r = image.GetRegion(160, 32, 64, 192); + Orthanc::ImageAccessor r; + + image.GetRegion(r, 32, 32, 64, 192); + Orthanc::ImageProcessing::Set(r, 0); + + image.GetRegion(r, 160, 32, 64, 192); Orthanc::ImageProcessing::Set(r, 255); { @@ -982,9 +988,12 @@ } } - Orthanc::ImageAccessor r = image.GetRegion(32, 32, 64, 192); - Orthanc::ImageProcessing::Set(r, 0); - r = image.GetRegion(160, 32, 64, 192); + Orthanc::ImageAccessor r; + + image.GetRegion(r, 32, 32, 64, 192); + Orthanc::ImageProcessing::Set(r, 0); + + image.GetRegion(r, 160, 32, 64, 192); Orthanc::ImageProcessing::Set(r, 65535); { @@ -1036,9 +1045,11 @@ } } - Orthanc::ImageAccessor r = image.GetRegion(32, 32, 64, 192); - Orthanc::ImageProcessing::Set(r, -32768); - r = image.GetRegion(160, 32, 64, 192); + Orthanc::ImageAccessor r; + image.GetRegion(r, 32, 32, 64, 192); + Orthanc::ImageProcessing::Set(r, -32768); + + image.GetRegion(r, 160, 32, 64, 192); Orthanc::ImageProcessing::Set(r, 32767); {