diff options
Diffstat (limited to 'img_handler.cpp')
-rw-r--r-- | img_handler.cpp | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/img_handler.cpp b/img_handler.cpp new file mode 100644 index 0000000..8285de6 --- /dev/null +++ b/img_handler.cpp @@ -0,0 +1,67 @@ +#include "img_handler.hpp" +#include "puzzle.hpp" + +#define STB_IMAGE_IMPLEMENTATION +#define STB_IMAGE_WRITE_IMPLEMENTATION +#define STB_IMAGE_RESIZE_IMPLEMENTATION +#include "lib/stb_image.h" +#include "lib/stb_image_resize2.h" +#include "lib/stb_image_write.h" + +#include <stdlib.h> +#include <filesystem> +#include <stdio.h> +#include <iostream> + +ImageHandler::ImageHandler(const char *p) : path_to_file(p) { + img_data = nullptr; + resized_data = nullptr; +#if defined(_WIN32) + auto it = path_to_file.find_last_of('\\'); +#else + auto it = path_to_file.find_last_of('/'); +#endif + std::string file_name = path_to_file.substr(it + 1); + std::string fn_withot_ext = + file_name.substr(0, file_name.find_first_of('.')); +#if defined(_WIN32) + path_to_save = "resources\\" + fn_withot_ext + "\\"; +#else + path_to_save = "resources/" + fn_withot_ext + '/'; +#endif + std::filesystem::create_directory(path_to_save); +} + +void ImageHandler::load_img() +{ + img_data = stbi_load(path_to_file.c_str(), &in_width, &in_height, + &channel, 0); +} + +void ImageHandler::resize_img() +{ + resized_data = + reinterpret_cast<unsigned char*>(malloc(in_width * in_height * + channel)); + stbir_resize_uint8_linear(img_data, in_width, in_height, 0, resized_data, + width, height, 0, (stbir_pixel_layout) channel); +} + +void ImageHandler::save_img() +{ + int x, y, i, j, k = 0; + for(i = 0; i < puzzles_per_side; ++i) + for(j = 0; j < puzzles_per_side; ++j, ++k) { + x = i * puzzle_size; + y = j * puzzle_size; + std::string tmp_name = + path_to_save + + std::to_string(k / puzzles_per_side) + + std::to_string(k % puzzles_per_side) + ".png"; + stbi_write_png(tmp_name.c_str(), puzzle_size, puzzle_size, channel, + resized_data + channel * (x + y * width), + width * channel); + } + stbi_image_free(resized_data); + stbi_image_free(img_data); +} |