stb: exposed error messages

This commit is contained in:
emeric
2024-01-06 21:09:20 +01:00
parent c016efa3bf
commit b80282a05a
2 changed files with 91 additions and 96 deletions
+13 -18
View File
@@ -25,6 +25,8 @@
#define STBIR_DEFAULT_FILTER_DOWNSAMPLE STBIR_FILTER_MITCHELL #define STBIR_DEFAULT_FILTER_DOWNSAMPLE STBIR_FILTER_MITCHELL
#define STBIR_DEFAULT_FILTER_UPSAMPLE STBIR_FILTER_CATMULLROM #define STBIR_DEFAULT_FILTER_UPSAMPLE STBIR_FILTER_CATMULLROM
#define STBI_FAILURE_USERMSG
#include <stb_image.h> #include <stb_image.h>
#include <stb_image_resize.h> #include <stb_image_resize.h>
@@ -44,8 +46,7 @@ namespace Image
return std::make_unique<STB::RawImage>(path); return std::make_unique<STB::RawImage>(path);
} }
void void init(const std::filesystem::path&)
init(const std::filesystem::path&)
{ {
} }
} }
@@ -55,9 +56,9 @@ namespace Image::STB
RawImage::RawImage(const std::byte* encodedData, std::size_t encodedDataSize) RawImage::RawImage(const std::byte* encodedData, std::size_t encodedDataSize)
{ {
int n; int n;
_data = UniquePtrFree {stbi_load_from_memory(reinterpret_cast<const stbi_uc*>(encodedData), encodedDataSize, &_width, &_height, &n, 3), std::free}; _data = UniquePtrFree{ ::stbi_load_from_memory(reinterpret_cast<const stbi_uc*>(encodedData), encodedDataSize, &_width, &_height, &n, 3), std::free };
if (!_data) if (!_data)
throw ImageException {"Cannot load image from memory"}; throw ImageException{ "Cannot load image from memory: " + std::string{ ::stbi_failure_reason() } };
} }
RawImage::RawImage(const std::filesystem::path& p) RawImage::RawImage(const std::filesystem::path& p)
@@ -65,11 +66,10 @@ namespace Image::STB
int n; int n;
_data = UniquePtrFree{ stbi_load(p.string().c_str(), &_width, &_height, &n, 3), std::free }; _data = UniquePtrFree{ stbi_load(p.string().c_str(), &_width, &_height, &n, 3), std::free };
if (!_data) if (!_data)
throw ImageException {"Cannot load image from memory"}; throw ImageException{ "Cannot load image from file: " + std::string{ ::stbi_failure_reason() } };
} }
void void RawImage::resize(ImageSize width)
RawImage::resize(ImageSize width)
{ {
size_t height; size_t height;
if (_width == _height) if (_width == _height)
@@ -90,11 +90,11 @@ namespace Image::STB
if (!resizedData) if (!resizedData)
throw ImageException{ "Cannot allocate memory for resized image!" }; throw ImageException{ "Cannot allocate memory for resized image!" };
if (stbir_resize_uint8_srgb(reinterpret_cast<const unsigned char*>(_data.get()), _width, _height, 0, if (::stbir_resize_uint8_srgb(reinterpret_cast<const unsigned char*>(_data.get()), _width, _height, 0,
reinterpret_cast<unsigned char*>(resizedData.get()), width, height, 0, reinterpret_cast<unsigned char*>(resizedData.get()), width, height, 0,
3, STBIR_ALPHA_CHANNEL_NONE, 0) == 0) 3, STBIR_ALPHA_CHANNEL_NONE, 0) == 0)
{ {
throw ImageException {"Failed to resize image!"}; throw ImageException{ "Failed to resize image:" + std::string{ ::stbi_failure_reason() } };
} }
_data = std::move(resizedData); _data = std::move(resizedData);
@@ -102,26 +102,22 @@ namespace Image::STB
_width = width; _width = width;
} }
std::unique_ptr<IEncodedImage> std::unique_ptr<IEncodedImage> RawImage::encodeToJPEG(unsigned quality) const
RawImage::encodeToJPEG(unsigned quality) const
{ {
return std::make_unique<JPEGImage>(*this, quality); return std::make_unique<JPEGImage>(*this, quality);
} }
ImageSize ImageSize RawImage::getWidth() const
RawImage::getWidth() const
{ {
return _width; return _width;
} }
ImageSize ImageSize RawImage::getHeight() const
RawImage::getHeight() const
{ {
return _height; return _height;
} }
const std::byte* const std::byte* RawImage::getData() const
RawImage::getData() const
{ {
if (!_data) if (!_data)
return nullptr; return nullptr;
@@ -129,4 +125,3 @@ namespace Image::STB
return reinterpret_cast<const std::byte*>(_data.get()); return reinterpret_cast<const std::byte*>(_data.get());
} }
} }