|
|
|
@ -12,23 +12,23 @@ namespace massivedynamic { |
|
|
|
|
|
|
|
|
|
class PixelRenderer : public Renderer { |
|
|
|
|
protected: |
|
|
|
|
size_t pixelSize; |
|
|
|
|
std::vector<Color> bitmap; |
|
|
|
|
|
|
|
|
|
void drawPixelScaled(size_t x, size_t y, Color color) { |
|
|
|
|
size_t pixelSize = floor(static_cast<float>(this->targetSize) / static_cast<float>(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<bool>& pixels, size_t sourceSize, size_t targetSize) : Renderer(pixels, sourceSize, targetSize) { |
|
|
|
|
if (this->targetSize == 0) |
|
|
|
|
this->targetSize = (sourceSize + 2) * 2; |
|
|
|
|
PixelRenderer(const std::vector<bool>& 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<float>(this->targetSize) / static_cast<float>(this->sourceSize + 2)); |
|
|
|
|
this->targetSize = (this->sourceSize + 2) * this->pixelSize; |
|
|
|
|
|
|
|
|
|
this->bitmap = std::vector<Color>(this->targetSize * this->targetSize, Colors::WHITE); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|