EuropaTools/include/europa/util/ImageSurface.hpp
modeco80 9c6448a817 libeuropa,libeuropa/tools: Drop libpixel dependency
libpixel (suprisingly) still compiles, but depends on libraries in a very annoying manner that makes EuropaTools hard to compile. Also, I don't like stb_image_write.

Replace it with some hand-done structs and the simpler/faster/better `lodepng`.
2025-01-15 23:40:41 -05:00

52 lines
No EOL
1 KiB
C++

//
// EuropaTools
//
// (C) 2021-2025 modeco80 <lily.modeco80@protonmail.ch>
//
// SPDX-License-Identifier: MIT
//
#pragma once
#include <cstddef>
#include <cstdint>
#include <europa/util/UniqueArray.hpp>
namespace europa::util {
struct Size {
std::uint16_t width;
std::uint16_t height;
constexpr std::size_t Linear() const {
return static_cast<std::size_t>(width) * static_cast<std::size_t>(height);
}
template <class T>
constexpr std::size_t LinearWithStride() const {
// We don't cast here since decltype(sizeof(...)) should
// always be size_t or a size_t bit-compatible type.
// (The C++ standard pretty much enforces #1 however)
return Linear() * sizeof(T);
}
};
/// A RGBA8888 image surface.
struct ImageSurface {
ImageSurface();
explicit ImageSurface(Size size);
Size GetSize() const;
std::uint32_t* GetBuffer();
std::uint32_t const* GetBuffer() const;
void Resize(Size newSize);
private:
UniqueArray<std::uint32_t> imageBuffer;
Size size;
};
} // namespace europa::util