h2-mod/src/utils/image.cpp
Federico Cecchetto c84d4c0dcc Custom textures
2021-08-23 17:11:45 +02:00

54 lines
992 B
C++

#include <stdinc.hpp>
#include "image.hpp"
#define STB_IMAGE_IMPLEMENTATION
#include <stb_image.h>
namespace utils
{
image::image(const std::string& image_data)
{
int channels{};
auto* rgb_image = stbi_load_from_memory(reinterpret_cast<const uint8_t*>(image_data.data()), static_cast<int>(image_data.size()), &this->width, &this->height, &channels, 4);
if(!rgb_image)
{
throw std::runtime_error("Unable to load image");
}
auto _ = gsl::finally([rgb_image]()
{
stbi_image_free(rgb_image);
});
const auto size = this->width * this->height * 4;
this->data.resize(size);
std::memmove(this->data.data(), rgb_image, size);
}
int image::get_width() const
{
return this->width;
}
int image::get_height() const
{
return this->height;
}
const void* image::get_buffer() const
{
return this->data.data();
}
size_t image::get_size() const
{
return this->data.size();
}
const std::string& image::get_data() const
{
return this->data;
}
}