Support-routines for the SDL-graphics-library. More...
#include "sdl/rect.hpp"#include "sdl/utils.hpp"#include "color.hpp"#include "log.hpp"#include "xBRZ/xbrz.hpp"#include <algorithm>#include <cassert>#include <cstring>#include "utils/span.hpp"#include <SDL2/SDL_version.h>#include <boost/circular_buffer.hpp>#include <boost/math/constants/constants.hpp>Go to the source code of this file.
Macros | |
| #define | ERR_DP LOG_STREAM(err, log_display) | 
Functions | |
| surface | scale_surface_xbrz (const surface &surf, std::size_t z) | 
| Scale a surface using xBRZ algorithm.  More... | |
| surface | scale_surface (const surface &surf, int w, int h) | 
| Scale a surface using alpha-weighted modified bilinear filtering Note: causes artifacts with alpha gradients, for example in some portraits.  More... | |
| surface | scale_surface_legacy (const surface &surf, int w, int h) | 
| Scale a surface using simple bilinear filtering (discarding rgb from source pixels with 0 alpha)  More... | |
| surface | scale_surface_sharp (const surface &surf, int w, int h) | 
| Scale a surface using modified nearest neighbour algorithm.  More... | |
| void | adjust_surface_color (surface &nsurf, int red, int green, int blue) | 
| void | greyscale_image (surface &nsurf) | 
| void | monochrome_image (surface &nsurf, const int threshold) | 
| void | sepia_image (surface &nsurf) | 
| void | negative_image (surface &nsurf, const int thresholdR, const int thresholdG, const int thresholdB) | 
| void | alpha_to_greyscale (surface &nsurf) | 
| void | wipe_alpha (surface &nsurf) | 
| void | shadow_image (surface &surf, int scale) | 
| create an heavy shadow of the image, by blurring, increasing alpha and darkening  More... | |
| void | swap_channels_image (surface &nsurf, channel r, channel g, channel b, channel a) | 
| void | recolor_image (surface &nsurf, const color_range_map &map_rgb) | 
| Recolors a surface using a map with source and converted palette values.  More... | |
| void | brighten_image (surface &nsurf, int32_t amount) | 
| void | adjust_surface_alpha (surface &surf, uint8_t alpha_mod) | 
| void | adjust_surface_alpha_add (surface &nsurf, int amount) | 
| void | mask_surface (surface &nsurf, const surface &nmask, bool *empty_result, const std::string &filename) | 
| Applies a mask on a surface.  More... | |
| bool | in_mask_surface (const surface &nsurf, const surface &nmask) | 
| Check if a surface fit into a mask.  More... | |
| void | light_surface (surface &nsurf, const surface &lightmap) | 
| Light surf using lightmap.  More... | |
| void | blur_surface (surface &surf, rect rect, int depth) | 
| Cross-fades a surface in place.  More... | |
| void | blur_alpha_surface (surface &res, int depth) | 
| Cross-fades a surface with alpha channel.  More... | |
| surface | cut_surface (const surface &surf, const rect &r) | 
| Cuts a rectangle from a surface.  More... | |
| void | blend_surface (surface &nsurf, const double amount, const color_t color) | 
| Blends a surface with a color.  More... | |
| surface | rotate_any_surface (const surface &surf, float angle, int zoom, int offset) | 
| Rotates a surface by any degrees.  More... | |
| surface | rotate_180_surface (const surface &surf) | 
| Rotates a surface 180 degrees.  More... | |
| surface | rotate_90_surface (const surface &surf, bool clockwise) | 
| Rotates a surface 90 degrees.  More... | |
| void | flip_surface (surface &nsurf) | 
| void | flop_surface (surface &nsurf) | 
| surface | get_surface_portion (const surface &src, rect &area) | 
| Get a portion of the screen.  More... | |
| rect | get_non_transparent_portion (const surface &nsurf) | 
Variables | |
| static lg::log_domain | log_display ("display") | 
Support-routines for the SDL-graphics-library.
Definition in file utils.cpp.
| #define ERR_DP LOG_STREAM(err, log_display) | 
| void adjust_surface_alpha | ( | surface & | surf, | 
| uint8_t | alpha_mod | ||
| ) | 
| void adjust_surface_alpha_add | ( | surface & | nsurf, | 
| int | amount | ||
| ) | 
Definition at line 692 of file utils.cpp.
References b, color_t::from_argb_bytes(), g, and surface_locker< T >::pixel_span().
| void adjust_surface_color | ( | surface & | nsurf, | 
| int | red, | ||
| int | green, | ||
| int | blue | ||
| ) | 
Definition at line 405 of file utils.cpp.
References b, blue, color_t::from_argb_bytes(), g, green, surface_locker< T >::pixel_span(), and red.
Referenced by image::apply_light(), image::get_tod_colored(), and image::cs_modification::operator()().
| void alpha_to_greyscale | ( | surface & | nsurf | ) | 
Definition at line 502 of file utils.cpp.
References surface_locker< T >::pixel_span().
Referenced by image::plot_alpha_modification::operator()().
Blends a surface with a color.
Every pixel in the surface will be blended with the color given. The final color of a pixel is amount * color + (1 - amount) * original.
| surf | The surface to blend. | 
| amount | The amount of the new color is determined by color. Must be a number in the range [0, 1].  | 
| color | The color to blend width, note its alpha channel is ignored. | 
Definition at line 1159 of file utils.cpp.
References b, blue, color_t::from_argb_bytes(), g, green, surface_locker< T >::pixel_span(), and red.
Referenced by image::blend_modification::operator()().
| void blur_alpha_surface | ( | surface & | surf, | 
| int | depth = 1  | 
        ||
| ) | 
Cross-fades a surface with alpha channel.
| surf | The source surface. | 
| depth | The depth of the blurring. | 
Definition at line 962 of file utils.cpp.
References blue, green, p, surface_locker< T >::pixels(), and red.
Referenced by image::bl_modification::operator()(), and shadow_image().
Cross-fades a surface in place.
| surf | The surface to blur, must have 32 bits per pixel. | 
| rect | The part of the surface to blur. | 
| depth | The depth of the blurring. | 
Definition at line 846 of file utils.cpp.
References blue, green, p, surface_locker< T >::pixels(), red, and surf.
Referenced by gui2::canvas::update_blur().
| void brighten_image | ( | surface & | nsurf, | 
| int32_t | amount | ||
| ) | 
Definition at line 665 of file utils.cpp.
References b, fixed_point_multiply(), color_t::from_argb_bytes(), g, and surface_locker< T >::pixel_span().
Cuts a rectangle from a surface.
Definition at line 1100 of file utils.cpp.
References surface_locker< T >::pixels(), PLAIN_LOG, utf8::size(), src, and surf.
Referenced by image::get_hexed(), image::load_image_sub_file(), and image::crop_modification::operator()().
| void flip_surface | ( | surface & | nsurf | ) | 
Definition at line 1323 of file utils.cpp.
References surface_locker< T >::pixels(), and swap().
Referenced by image::fl_modification::operator()().
| void flop_surface | ( | surface & | nsurf | ) | 
Definition at line 1339 of file utils.cpp.
References surface_locker< T >::pixels(), and swap().
Referenced by image::fl_modification::operator()().
Definition at line 1399 of file utils.cpp.
References n, and surface_locker< T >::pixels().
Referenced by image::crop_transparency_modification::operator()().
Get a portion of the screen.
Send nullptr if the portion is outside of the screen.
| surf | The source surface. | 
| rect | The portion of the source surface to copy. | 
| 0 | if error or the portion is outside of the surface. | 
Definition at line 1355 of file utils.cpp.
References dst, PLAIN_LOG, and src.
Referenced by image::crop_transparency_modification::operator()().
| void greyscale_image | ( | surface & | nsurf | ) | 
Definition at line 422 of file utils.cpp.
References b, color_t::from_argb_bytes(), g, and surface_locker< T >::pixel_span().
Referenced by image::gs_modification::operator()().
Check if a surface fit into a mask.
Definition at line 760 of file utils.cpp.
References surface_locker< T >::pixels().
Referenced by image::is_in_hex().
Light surf using lightmap.
| surf | The source surface. | 
| lightmap | add/subtract this color to surf but RGB values are converted to (X-128)*2 to cover the full (-256,256) spectrum. Should already be neutral | 
Definition at line 798 of file utils.cpp.
References surface::area(), b, color_t::from_argb_bytes(), g, surface_locker< T >::pixels(), and PLAIN_LOG.
Referenced by image::apply_light(), and image::light_modification::operator()().
| void mask_surface | ( | surface & | nsurf, | 
| const surface & | nmask, | ||
| bool * | empty_result, | ||
| const std::string & | filename | ||
| ) | 
Applies a mask on a surface.
Definition at line 706 of file utils.cpp.
References surface::area(), b, filename, color_t::from_argb_bytes(), g, surface_locker< T >::pixels(), and PLAIN_LOG.
Referenced by image::get_hexed(), image::is_empty_hex(), image::load_image_sub_file(), and image::mask_modification::operator()().
| void monochrome_image | ( | surface & | nsurf, | 
| const int | threshold | ||
| ) | 
Definition at line 444 of file utils.cpp.
References b, color_t::from_argb_bytes(), g, and surface_locker< T >::pixel_span().
Referenced by image::bw_modification::operator()().
| void negative_image | ( | surface & | nsurf, | 
| const int | thresholdR, | ||
| const int | thresholdG, | ||
| const int | thresholdB | ||
| ) | 
Definition at line 481 of file utils.cpp.
References b, color_t::from_argb_bytes(), g, and surface_locker< T >::pixel_span().
Referenced by image::negative_modification::operator()().
| void recolor_image | ( | surface & | surf, | 
| const color_range_map & | map_rgb | ||
| ) | 
Recolors a surface using a map with source and converted palette values.
This is most often used for team-coloring.
| surf | The source surface. | 
| map_rgb | Map of color values, with the keys corresponding to the source palette, and the values to the recolored palette. | 
Definition at line 634 of file utils.cpp.
References ALPHA_OPAQUE, color_t::from_argb_bytes(), and surface_locker< T >::pixel_span().
Referenced by image::rc_modification::operator()().
Rotates a surface 180 degrees.
| surf | The surface to rotate. | 
Definition at line 1249 of file utils.cpp.
References surface::clone(), is_odd(), surface_locker< T >::pixels(), PLAIN_LOG, surf, and swap().
Referenced by image::fl_modification::operator()(), and image::rotate_modification::operator()().
Rotates a surface 90 degrees.
| surf | The surface to rotate. | 
| clockwise | Whether the rotation should be clockwise (true) or counter-clockwise (false). | 
Definition at line 1289 of file utils.cpp.
References dst, surface_locker< T >::pixels(), PLAIN_LOG, and surf.
Referenced by image::rotate_modification::operator()().
Rotates a surface by any degrees.
zoom >= offset Otherwise offset > 0 Otherwise the procedure will not return.| surf | The surface to rotate. | 
| angle | The angle of rotation. | 
| zoom | Which zoom level to use for calculating the result. | 
| offset | Pixel offset when scanning the zoomed source. | 
Definition at line 1187 of file utils.cpp.
References dst, surface_locker< T >::pixels(), xbrz::scale(), scale_surface(), src, and surf.
Referenced by image::rotate_modification::operator()().
Scale a surface using alpha-weighted modified bilinear filtering Note: causes artifacts with alpha gradients, for example in some portraits.
| surf | The source surface. | 
| w | The width of the resulting surface. | 
| h | The height of the resulting surface. | 
| 0 | Returned upon error. | 
| surf | Returned if w == surf->w and h == surf->h. | 
Definition at line 99 of file utils.cpp.
References b, dst, e, fixed_point_divide(), fixed_point_to_int(), g, h, loc, n, surface_locker< T >::pixels(), PLAIN_LOG, s, surf, and w.
Referenced by image::light_modification::operator()(), video::read_pixels_low_res(), and rotate_any_surface().
Scale a surface using simple bilinear filtering (discarding rgb from source pixels with 0 alpha)
| surf | The source surface. | 
| w | The width of the resulting surface. | 
| h | The height of the resulting surface. | 
| 0 | Returned upon error. | 
| surf | Returned if w == surf->w and h == surf->h. | 
Definition at line 225 of file utils.cpp.
References b, dst, fixed_point_divide(), fixed_point_to_int(), g, h, loc, surface_locker< T >::pixels(), PLAIN_LOG, surf, and w.
Referenced by image::scale_modification::operator()().
Scale a surface using modified nearest neighbour algorithm.
Use only if preserving sharp edges is a priority (e.g. minimap).
| surf | The source surface. | 
| w | The width of the resulting surface. | 
| h | The height of the resulting surface. | 
| 0 | Returned upon error. | 
| surf | Returned if w == surf->w and h == surf->h. | 
Definition at line 358 of file utils.cpp.
References dst, h, surface_locker< T >::pixels(), PLAIN_LOG, surf, and w.
Referenced by BOOST_AUTO_TEST_CASE(), and image::scale_modification::operator()().
Scale a surface using xBRZ algorithm.
| surf | The source surface | 
| z | The scaling factor. Should be an integer 2-5 (1 is tolerated). | 
Definition at line 61 of file utils.cpp.
References xbrz::ARGB, dst, surface_locker< T >::pixels(), PLAIN_LOG, xbrz::scale(), xbrz::SCALE_FACTOR_MAX, and surf.
Referenced by image::xbrz_modification::operator()().
| void sepia_image | ( | surface & | nsurf | ) | 
Definition at line 462 of file utils.cpp.
References b, color_t::from_argb_bytes(), g, and surface_locker< T >::pixel_span().
Referenced by image::sepia_modification::operator()().
| void shadow_image | ( | surface & | surf, | 
| int | scale | ||
| ) | 
create an heavy shadow of the image, by blurring, increasing alpha and darkening
Definition at line 527 of file utils.cpp.
References blur_alpha_surface(), surface_locker< T >::pixel_span(), xbrz::scale(), and surf.
Definition at line 552 of file utils.cpp.
References ALPHA, b, BLUE, blue, color_t::from_argb_bytes(), g, GREEN, green, surface_locker< T >::pixel_span(), RED, and red.
Referenced by image::swap_modification::operator()().
| void wipe_alpha | ( | surface & | nsurf | ) | 
Definition at line 515 of file utils.cpp.
References surface_locker< T >::pixel_span().
Referenced by image::wipe_alpha_modification::operator()().
      
  | 
  static |