123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- /*
- * SDLImageScaler.h, part of VCMI engine
- *
- * Authors: listed in file AUTHORS in main folder
- *
- * License: GNU General Public License v2.0 or later
- * Full text of license available in license.txt file, in main folder
- *
- */
- #pragma once
- #include "../render/IImage.h"
- #include "../../lib/Rect.h"
- class SDLImageOptimizer : boost::noncopyable
- {
- SDL_Surface * surf = nullptr;
- SDL_Surface * output = nullptr;
- Rect virtualDimensions = Rect(0,0,0,0);
- public:
- SDLImageOptimizer(SDL_Surface * surf, const Rect & virtualDimensions);
- void optimizeSurface(SDL_Surface * formatSourceSurface);
- /// Aquires resulting surface and transfers surface ownership to the caller
- /// May return nullptr if input image was empty
- SDL_Surface * acquireResultSurface();
- /// Returns adjusted virtual dimensions of resulting surface
- const Rect & getResultDimensions() const;
- };
- /// Class that performs scaling of SDL surfaces
- /// Object construction MUST be performed while holding UI lock
- /// but task execution can be performed asynchronously if needed
- class SDLImageScaler : boost::noncopyable
- {
- SDL_Surface * intermediate = nullptr;
- SDL_Surface * ret = nullptr;
- Rect virtualDimensionsInput = Rect(0,0,0,0);
- Rect virtualDimensionsOutput = Rect(0,0,0,0);
- public:
- SDLImageScaler(SDL_Surface * surf);
- SDLImageScaler(SDL_Surface * surf, const Rect & virtualDimensions, bool optimizeImage);
- ~SDLImageScaler();
- /// Performs upscaling or downscaling to a requested dimensions
- /// Aspect ratio is NOT maintained.
- /// xbrz algorithm is not supported in this mode
- void scaleSurface(Point dimensions, EScalingAlgorithm algorithm);
- /// Performs upscaling by specified integral factor, potentially using xbrz algorithm if requested
- void scaleSurfaceIntegerFactor(int factor, EScalingAlgorithm algorithm);
- /// Aquires resulting surface and transfers surface ownership to the caller
- /// May return nullptr if input image was empty
- SDL_Surface * acquireResultSurface();
- /// Returns adjusted virtual dimensions of resulting surface
- const Rect & getResultDimensions() const;
- };
|