diff options
Diffstat (limited to 'src/ResourceCache.cpp')
-rw-r--r-- | src/ResourceCache.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/ResourceCache.cpp b/src/ResourceCache.cpp index 4664bf0..f6f8fad 100644 --- a/src/ResourceCache.cpp +++ b/src/ResourceCache.cpp @@ -1,5 +1,6 @@ #include "../include/ResourceCache.hpp" #include <unordered_map> +#include <gd.h> using namespace std; @@ -33,6 +34,29 @@ namespace dchat auto it = textures.find(filepath); if(it != textures.end()) return it->second; + + gdImagePtr imgPtr = gdImageCreateFromFile(filepath.c_str()); + if(!imgPtr) + { + string errMsg = "Failed to load texture with gd: "; + errMsg += filepath; + throw FailedToLoadResourceException(errMsg); + } + + gdImageSetInterpolationMethod(imgPtr, GD_BILINEAR_FIXED); + gdImagePtr newImgPtr = gdImageScale(imgPtr, 100, 100); + if(!newImgPtr) + { + gdImageDestroy(imgPtr); + string errMsg = "Failed to scale image with gd: "; + errMsg += filepath; + throw FailedToLoadResourceException(errMsg); + } + + gdImageFile(newImgPtr, filepath.c_str()); + + gdImageDestroy(imgPtr); + gdImageDestroy(newImgPtr); sf::Texture *texture = new sf::Texture(); if(!texture->loadFromFile(filepath)) |