From 39db18bcecf0dfdccac3341c74fccb36e42c66c5 Mon Sep 17 00:00:00 2001 From: Sebastian Sosnowski Date: Tue, 13 Jan 2026 20:17:07 +0100 Subject: [PATCH 1/2] Implement compressGrayscale --- homework/grayscale-image/compression.cpp | 35 ++++++++++++++++++++++++ homework/grayscale-image/compression.hpp | 15 ++++++++++ homework/grayscale-image/main.cpp | 8 +++--- homework/grayscale-image/test.cpp | 1 + 4 files changed, 55 insertions(+), 4 deletions(-) create mode 100644 homework/grayscale-image/compression.cpp create mode 100644 homework/grayscale-image/compression.hpp diff --git a/homework/grayscale-image/compression.cpp b/homework/grayscale-image/compression.cpp new file mode 100644 index 000000000..bb657e28e --- /dev/null +++ b/homework/grayscale-image/compression.cpp @@ -0,0 +1,35 @@ +#include "compression.hpp" + +std::vector> compressGrayscale(std::array, height>& bitmap) { + std::vector> compressed; + for (int i = 0; i < height; i++) { + int count = 1, left = bitmap[i][0], right; + for (int j = 1; j < width; j++) { + right = bitmap[i][j]; + if (right == left) { + count++; + } else { + compressed.push_back(std::make_pair(left, count)); + left = right; + count = 1; + } + } + compressed.push_back(std::make_pair(left, count)); // push last pixel / series of pixels + } + return compressed; +} + +std::array, height> decompressGrayscale(const std::vector>& compressed_bitmap) { + std::array, height> decompressed; + + return decompressed; +} + +void printMap(const std::array, height>& bitmap) { + for (int i = 0; i < height; i++) { + for (int j = 0; j < width; j++) { + std::cout << std::setw(3) << int(bitmap[i][j]) << ' '; + } + std::cout << "\n"; + } +} \ No newline at end of file diff --git a/homework/grayscale-image/compression.hpp b/homework/grayscale-image/compression.hpp new file mode 100644 index 000000000..08645dd8d --- /dev/null +++ b/homework/grayscale-image/compression.hpp @@ -0,0 +1,15 @@ +#pragma once +#include +#include +#include +#include +#include +#include +#include + +constexpr size_t width = 240; +constexpr size_t height = 160; + +std::vector> compressGrayscale(std::array, height>& bitmap); +std::array, height> decompressGrayscale(const std::vector>& compressed_bitmap); +void printMap(const std::array, height>& bitmap); \ No newline at end of file diff --git a/homework/grayscale-image/main.cpp b/homework/grayscale-image/main.cpp index b9dc994f0..f676c82cf 100644 --- a/homework/grayscale-image/main.cpp +++ b/homework/grayscale-image/main.cpp @@ -1,7 +1,7 @@ #include #include -// TODO: include +#include "compression.hpp" std::array, 32> generateNinja() { return { @@ -41,10 +41,10 @@ std::array, 32> generateNinja() { } int main() { - auto ninja = generateNinja(); + // auto ninja = generateNinja(); // printMap(ninja); - auto compressed = compressGrayscale(ninja); - auto decompressed = decompressGrayscale(compressed); + // auto compressed = compressGrayscale(ninja); + // auto decompressed = decompressGrayscale(compressed); // printMap(decompressed); return 0; diff --git a/homework/grayscale-image/test.cpp b/homework/grayscale-image/test.cpp index 3b2f1bca6..898c82b61 100644 --- a/homework/grayscale-image/test.cpp +++ b/homework/grayscale-image/test.cpp @@ -4,6 +4,7 @@ #include // TODO: include +#include "compression.hpp" #include "gtest/gtest.h" void expectBitmap(const std::vector>& bitmap, size_t fraction) { From b06519381a40631f5545f6702fb8d20f043bbd54 Mon Sep 17 00:00:00 2001 From: Sebastian Sosnowski Date: Tue, 13 Jan 2026 20:17:31 +0100 Subject: [PATCH 2/2] Implement decompressGrayscale --- homework/grayscale-image/compression.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/homework/grayscale-image/compression.cpp b/homework/grayscale-image/compression.cpp index bb657e28e..a3103bae0 100644 --- a/homework/grayscale-image/compression.cpp +++ b/homework/grayscale-image/compression.cpp @@ -21,7 +21,16 @@ std::vector> compressGrayscale(std::array, height> decompressGrayscale(const std::vector>& compressed_bitmap) { std::array, height> decompressed; - + int row = 0, column = 0; + for (const auto& [value, count] : compressed_bitmap) { + std::fill_n(decompressed[row].begin() + column, count, value); + column += count; + if (column == width) { + column = 0; + row++; + } + } + // printMap(decompressed); return decompressed; }