diff --git a/uppsrc/Geom/Draw/hrr.cpp b/uppsrc/Geom/Draw/hrr.cpp index c8b99842a..6de2629d9 100644 --- a/uppsrc/Geom/Draw/hrr.cpp +++ b/uppsrc/Geom/Draw/hrr.cpp @@ -53,9 +53,21 @@ void ImageWriter::WriteLineRaw(const byte *s) } } +ImageBufferRaster::ImageBufferRaster(const ImageBuffer& buffer_) +: buffer(buffer_) +{ + crop = buffer.GetSize(); +} + +ImageBufferRaster::ImageBufferRaster(const ImageBuffer& buffer_, const Rect& crop_) +: buffer(buffer_) +{ + crop = crop_ & Rect(buffer.GetSize()); +} + Size ImageBufferRaster::GetSize() { - return buffer.GetSize(); + return crop.Size(); } Raster::Info ImageBufferRaster::GetInfo() @@ -71,7 +83,7 @@ Raster::Info ImageBufferRaster::GetInfo() Raster::Line ImageBufferRaster::GetLine(int line) { - return Line(buffer[line], false); + return Line(buffer[line + crop.top] + crop.left, false); } inline Stream& operator % (Stream& strm, Color& color) diff --git a/uppsrc/Geom/Draw/hrr.h b/uppsrc/Geom/Draw/hrr.h index 390e4475d..dc6d95dc0 100644 --- a/uppsrc/Geom/Draw/hrr.h +++ b/uppsrc/Geom/Draw/hrr.h @@ -31,14 +31,16 @@ private: class ImageBufferRaster : public Raster { public: - ImageBufferRaster(const ImageBuffer& buffer) : buffer(buffer) {} + ImageBufferRaster(const ImageBuffer& buffer); + ImageBufferRaster(const ImageBuffer& buffer, const Rect& crop); - virtual Size GetSize(); - virtual Info GetInfo(); - virtual Line GetLine(int line); + virtual Size GetSize(); + virtual Info GetInfo(); + virtual Line GetLine(int line); private: const ImageBuffer& buffer; + Rect crop; }; class HRRInfo