From 3456e92a4015c7ece7b24c9db2bab6c3d7cd7dab Mon Sep 17 00:00:00 2001 From: Michael Ochmann Date: Wed, 22 Feb 2023 19:08:58 +0100 Subject: [PATCH] added border padding back to `massivedynamic::PixelRenderer` --- src/PixelRenderer.hpp | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/PixelRenderer.hpp b/src/PixelRenderer.hpp index a25dc81..ec71b6a 100644 --- a/src/PixelRenderer.hpp +++ b/src/PixelRenderer.hpp @@ -12,23 +12,23 @@ namespace massivedynamic { class PixelRenderer : public Renderer { protected: + size_t pixelSize; std::vector bitmap; void drawPixelScaled(size_t x, size_t y, Color color) { - size_t pixelSize = floor(static_cast(this->targetSize) / static_cast(this->sourceSize + 2)); + size_t pixelSize = this->pixelSize; if (pixelSize < 1) { std::cerr << "ERROR: output file size is too small" << std::endl; exit(1); } - size_t absoluteX = pixelSize * x; - size_t absoluteY = pixelSize * y; + size_t absoluteX = pixelSize * x + pixelSize; + size_t absoluteY = pixelSize * y + pixelSize; - for (size_t localY = absoluteY + pixelSize; localY < absoluteY + pixelSize + pixelSize; localY++) { - for (size_t localX = absoluteX + pixelSize; localX < absoluteX + pixelSize + pixelSize; localX++) { - size_t absPos = localY * this->targetSize + localX; - this->bitmap.at(absPos) = color; + for (size_t localY = absoluteY; localY < absoluteY + pixelSize; localY++) { + for (size_t localX = absoluteX; localX < absoluteX + pixelSize; localX++) { + this->bitmap.at(localY * this->targetSize + localX) = color; } } } @@ -38,9 +38,13 @@ namespace massivedynamic { WHITE = 0xFFFFFFFF }; - PixelRenderer(const std::vector& pixels, size_t sourceSize, size_t targetSize) : Renderer(pixels, sourceSize, targetSize) { - if (this->targetSize == 0) - this->targetSize = (sourceSize + 2) * 2; + PixelRenderer(const std::vector& pixels, size_t sourceSize, size_t targetSize) : Renderer(pixels, sourceSize, targetSize), pixelSize(0) { + this->targetSize = this->targetSize == 0 ? (sourceSize + 2) * 2 : this->targetSize; + + // here we make shure, `targetSize` will be a multiple of `sourceSize` + this->pixelSize = round(static_cast(this->targetSize) / static_cast(this->sourceSize + 2)); + this->targetSize = (this->sourceSize + 2) * this->pixelSize; + this->bitmap = std::vector(this->targetSize * this->targetSize, Colors::WHITE); }