summaryrefslogtreecommitdiffhomepage
path: root/crop-tool/atlas.cpp
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2022-09-30 18:55:15 +0200
committerStanislaw Halik <sthalik@misaki.pl>2022-09-30 18:55:15 +0200
commit5ee36284ab2f2d85679f83ad7680a741bf7f6702 (patch)
tree825566e0a21b6b7b8d0ad3f81880ebe4c3f3ce3d /crop-tool/atlas.cpp
parentc7ce9f57f53325e47574bf0fcdaa495146656289 (diff)
.
Diffstat (limited to 'crop-tool/atlas.cpp')
-rw-r--r--crop-tool/atlas.cpp63
1 files changed, 0 insertions, 63 deletions
diff --git a/crop-tool/atlas.cpp b/crop-tool/atlas.cpp
deleted file mode 100644
index a588ff3c..00000000
--- a/crop-tool/atlas.cpp
+++ /dev/null
@@ -1,63 +0,0 @@
-#undef NDEBUG
-
-#include "atlas.hpp"
-#include "anim/serialize.hpp"
-
-#include <cassert>
-#include <filesystem>
-#include <opencv2/imgcodecs.hpp>
-
-void anim_atlas_row::add_entry(const anim_atlas_entry& x) noexcept
-{
- auto& frame = *x.frame;
- const auto& mat = x.mat;
- frame.offset = {xpos, ypos};
- frame.size = {mat.cols, mat.rows};
-
- assert(mat.rows > 0 && mat.cols > 0);
- data.push_back(x);
- xpos += mat.cols;
- max_height = std::max(mat.rows, max_height);
-}
-
-void anim_atlas::advance_row() noexcept
-{
- auto& row = rows.back();
- if (row.data.empty())
- return;
- assert(row.xpos); assert(row.max_height);
- ypos += row.max_height;
- maxx = std::max(row.xpos, maxx);
- rows.push_back({{}, 0, 0, ypos});
-}
-
-Magnum::Vector2i anim_atlas::offset() const noexcept
-{
- const auto& row = rows.back();
- return {row.xpos, row.ypos};
-}
-
-Magnum::Vector2i anim_atlas::size() const noexcept
-{
- const anim_atlas_row& row = rows.back();
- // prevent accidentally writing out of bounds by forgetting to call
- // anim_atlas::advance_row() one last time prior to anim_atlas::size()
- return {std::max(maxx, row.xpos), ypos + row.max_height};
-}
-
-bool anim_atlas::dump(const std::filesystem::path& filename) const noexcept
-{
- auto sz = size();
- cv::Mat4b mat(sz[1], sz[0]);
- mat.setTo(0);
-
- for (const anim_atlas_row& row : rows)
- for (const anim_atlas_entry& x : row.data)
- {
- auto offset = x.frame->offset, size = x.frame->size;
- cv::Rect roi = {offset[0], offset[1], size[0], size[1]};
- x.mat.copyTo(mat(roi));
- }
-
- return cv::imwrite(filename.string(), mat);
-}