From 049532779bddfe2b8194d3cd9149b4fe7dccf568 Mon Sep 17 00:00:00 2001 From: ctrl-daan Date: Thu, 24 Apr 2025 12:36:49 +0200 Subject: [PATCH 1/4] compression functions refractored --- homework/grayscale-image/compression.cpp | 37 ++++++++++++++++++++++++ homework/grayscale-image/compression.hpp | 12 ++++++++ homework/grayscale-image/main.cpp | 3 +- homework/grayscale-image/test.cpp | 2 +- 4 files changed, 52 insertions(+), 2 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..1ad4fad2b --- /dev/null +++ b/homework/grayscale-image/compression.cpp @@ -0,0 +1,37 @@ +#include "compression.hpp" + +std::vector> compressGrayscale(std::array, height>& bitimg) { + std::vector> compressed; + + std::for_each(bitimg.begin(), bitimg.end(), [&compressed](auto& column) { + int count = 1; + std::for_each(std::next(column.begin()), column.end(), [&compressed, &count, &column](auto& pixel) { + int row = std::distance(column.begin(), &pixel); + if (pixel == column[row - 1]) { + count++; + } else { + compressed.push_back({column[row - 1], count}); + count = 1; + } + if (row == column.size() - 1) { + compressed.push_back({pixel, count}); + } + }); + }); + + return compressed; +} + +std::array, height> decompressGrayscale(std::vector>& compressed) { + std::array, height> decompressed; + + int index = 0; + std::for_each(compressed.begin(), compressed.end(), [&decompressed, &index](const std::pair& c) { + uint8_t value = c.first; + uint8_t count = c.second; + std::generate_n(&decompressed[index / height][index % height], count, [value]() { return value; }); + index += count; + }); + + return decompressed; +} \ 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..385f259ac --- /dev/null +++ b/homework/grayscale-image/compression.hpp @@ -0,0 +1,12 @@ +#pragma once +#include +#include +#include +#include +#include + +constexpr std::size_t width = 32; +constexpr std::size_t height = 32; + +std::vector> compressGrayscale(std::array, height>& bitimg); +std::array, height> decompressGrayscale(std::vector>& bitimg); \ No newline at end of file diff --git a/homework/grayscale-image/main.cpp b/homework/grayscale-image/main.cpp index b9dc994f0..cba1bf5aa 100644 --- a/homework/grayscale-image/main.cpp +++ b/homework/grayscale-image/main.cpp @@ -1,7 +1,8 @@ #include +#include #include -// TODO: include +#include "compression.hpp" std::array, 32> generateNinja() { return { diff --git a/homework/grayscale-image/test.cpp b/homework/grayscale-image/test.cpp index 3b2f1bca6..223eeb095 100644 --- a/homework/grayscale-image/test.cpp +++ b/homework/grayscale-image/test.cpp @@ -3,7 +3,7 @@ #include // for std::pair<> #include -// TODO: include +#include "compression.hpp" #include "gtest/gtest.h" void expectBitmap(const std::vector>& bitmap, size_t fraction) { From 300545043d5abd6fa4865b723dc26ca6daa55bbf Mon Sep 17 00:00:00 2001 From: ctrl-daan Date: Thu, 24 Apr 2025 12:42:30 +0200 Subject: [PATCH 2/4] moving algorithm include to main --- homework/grayscale-image/compression.hpp | 1 - homework/grayscale-image/main.cpp | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/homework/grayscale-image/compression.hpp b/homework/grayscale-image/compression.hpp index 385f259ac..de90e3a2b 100644 --- a/homework/grayscale-image/compression.hpp +++ b/homework/grayscale-image/compression.hpp @@ -1,5 +1,4 @@ #pragma once -#include #include #include #include diff --git a/homework/grayscale-image/main.cpp b/homework/grayscale-image/main.cpp index cba1bf5aa..1593c5a2a 100644 --- a/homework/grayscale-image/main.cpp +++ b/homework/grayscale-image/main.cpp @@ -1,3 +1,4 @@ +#include #include #include #include From 35bfc29c441b75532ad7196e42390b6ede714952 Mon Sep 17 00:00:00 2001 From: ctrl-daan Date: Thu, 24 Apr 2025 12:45:58 +0200 Subject: [PATCH 3/4] added iterator header --- homework/grayscale-image/compression.hpp | 2 ++ homework/grayscale-image/main.cpp | 1 + 2 files changed, 3 insertions(+) diff --git a/homework/grayscale-image/compression.hpp b/homework/grayscale-image/compression.hpp index de90e3a2b..f8d5e322e 100644 --- a/homework/grayscale-image/compression.hpp +++ b/homework/grayscale-image/compression.hpp @@ -1,6 +1,8 @@ #pragma once +#include #include #include +#include #include #include diff --git a/homework/grayscale-image/main.cpp b/homework/grayscale-image/main.cpp index 1593c5a2a..2c956a1d8 100644 --- a/homework/grayscale-image/main.cpp +++ b/homework/grayscale-image/main.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include "compression.hpp" From 3646c6ed5ad2352360a603fbd0a568db330f6a99 Mon Sep 17 00:00:00 2001 From: ctrl-daan Date: Thu, 24 Apr 2025 12:47:51 +0200 Subject: [PATCH 4/4] ... --- homework/grayscale-image/compression.cpp | 1 + homework/grayscale-image/compression.hpp | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/homework/grayscale-image/compression.cpp b/homework/grayscale-image/compression.cpp index 1ad4fad2b..fad175760 100644 --- a/homework/grayscale-image/compression.cpp +++ b/homework/grayscale-image/compression.cpp @@ -1,4 +1,5 @@ #include "compression.hpp" +#include std::vector> compressGrayscale(std::array, height>& bitimg) { std::vector> compressed; diff --git a/homework/grayscale-image/compression.hpp b/homework/grayscale-image/compression.hpp index f8d5e322e..bcb3e0669 100644 --- a/homework/grayscale-image/compression.hpp +++ b/homework/grayscale-image/compression.hpp @@ -1,5 +1,4 @@ #pragma once -#include #include #include #include