#include "color_range.hpp"
#include "color.hpp"
#include "sdl/surface.hpp"
#include "utils/math.hpp"
#include "game_version.hpp"
#include <cstdlib>
#include <string>
Go to the source code of this file.
Namespaces | |
sdl | |
Enumerations | |
enum | channel { RED , GREEN , BLUE , ALPHA } |
Functions | |
version_info | sdl::get_version () |
Returns the runtime SDL version. More... | |
bool | sdl::runtime_at_least (uint8_t major, uint8_t minor=0, uint8_t patch=0) |
Returns true if the runtime SDL version is at or greater than the specified version, false otherwise. More... | |
void | sdl_blit (const surface &src, const SDL_Rect *src_rect, surface &dst, SDL_Rect *dst_rect) |
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 &surf, int r, int g, int b) |
void | greyscale_image (surface &surf) |
void | monochrome_image (surface &surf, const int threshold) |
void | sepia_image (surface &surf) |
void | negative_image (surface &surf, const int thresholdR, const int thresholdG, const int thresholdB) |
void | alpha_to_greyscale (surface &surf) |
void | wipe_alpha (surface &surf) |
void | shadow_image (surface &surf, int scale=1) |
create an heavy shadow of the image, by blurring, increasing alpha and darkening More... | |
void | swap_channels_image (surface &surf, channel r, channel g, channel b, channel a) |
void | recolor_image (surface &surf, const color_range_map &map_rgb) |
Recolors a surface using a map with source and converted palette values. More... | |
void | brighten_image (surface &surf, int32_t amount) |
surface | get_surface_portion (const surface &surf, SDL_Rect &rect) |
Get a portion of the screen. More... | |
void | adjust_surface_alpha (surface &surf, uint8_t alpha_mod) |
void | adjust_surface_alpha_add (surface &surf, int amount) |
void | mask_surface (surface &surf, const surface &mask, bool *empty_result=nullptr, const std::string &filename=std::string()) |
Applies a mask on a surface. More... | |
bool | in_mask_surface (const surface &surf, const surface &mask) |
Check if a surface fit into a mask. More... | |
void | light_surface (surface &surf, const surface &lightmap) |
Light surf using lightmap. More... | |
void | blur_surface (surface &surf, SDL_Rect rect, int depth=1) |
Cross-fades a surface in place. More... | |
void | blur_alpha_surface (surface &surf, int depth=1) |
Cross-fades a surface with alpha channel. More... | |
surface | cut_surface (const surface &surf, const SDL_Rect &r) |
Cuts a rectangle from a surface. More... | |
void | blend_surface (surface &surf, 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 &surf) |
void | flop_surface (surface &surf) |
rect | get_non_transparent_portion (const surface &surf) |
void adjust_surface_alpha | ( | surface & | surf, |
uint8_t | alpha_mod | ||
) |
void adjust_surface_alpha_add | ( | surface & | surf, |
int | amount | ||
) |
Definition at line 780 of file utils.cpp.
References surface::area(), b, g, and surface_locker< T >::pixels().
void adjust_surface_color | ( | surface & | surf, |
int | r, | ||
int | g, | ||
int | b | ||
) |
Definition at line 401 of file utils.cpp.
References surface::area(), b, blue, g, green, surface_locker< T >::pixels(), and red.
Referenced by image::apply_light(), image::get_tod_colored(), and image::cs_modification::operator()().
void alpha_to_greyscale | ( | surface & | surf | ) |
Definition at line 555 of file utils.cpp.
References surface::area(), and surface_locker< T >::pixels().
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 1274 of file utils.cpp.
References surface::area(), b, blue, g, green, surface_locker< T >::pixels(), 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 1077 of file utils.cpp.
References blue, green, p, surface_locker< T >::pixels(), and red.
Referenced by image::bl_modification::operator()(), and shadow_image().
void blur_surface | ( | surface & | surf, |
SDL_Rect | rect, | ||
int | depth = 1 |
||
) |
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 961 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 & | surf, |
int32_t | amount | ||
) |
Definition at line 742 of file utils.cpp.
References surface::area(), b, fixed_point_multiply(), g, and surface_locker< T >::pixels().
Cuts a rectangle from a surface.
Definition at line 1215 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 & | surf | ) |
Definition at line 1441 of file utils.cpp.
References surface_locker< T >::pixels(), and swap().
Referenced by image::fl_modification::operator()().
void flop_surface | ( | surface & | surf | ) |
Definition at line 1457 of file utils.cpp.
References surface_locker< T >::pixels(), and swap().
Referenced by image::fl_modification::operator()().
Definition at line 1517 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 1473 of file utils.cpp.
References dst, PLAIN_LOG, and src.
Referenced by image::crop_transparency_modification::operator()().
void greyscale_image | ( | surface & | surf | ) |
Definition at line 429 of file utils.cpp.
References surface::area(), b, g, and surface_locker< T >::pixels().
Referenced by image::gs_modification::operator()().
Check if a surface fit into a mask.
Definition at line 866 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 904 of file utils.cpp.
References surface::area(), b, g, surface_locker< T >::pixels(), and PLAIN_LOG.
Referenced by image::apply_light(), and image::light_modification::operator()().
void mask_surface | ( | surface & | surf, |
const surface & | mask, | ||
bool * | empty_result = nullptr , |
||
const std::string & | filename = std::string() |
||
) |
Applies a mask on a surface.
Definition at line 805 of file utils.cpp.
References surface::area(), b, filename, 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 & | surf, |
const int | threshold | ||
) |
Definition at line 463 of file utils.cpp.
References surface::area(), b, g, and surface_locker< T >::pixels().
Referenced by image::bw_modification::operator()().
void negative_image | ( | surface & | surf, |
const int | thresholdR, | ||
const int | thresholdG, | ||
const int | thresholdB | ||
) |
Definition at line 523 of file utils.cpp.
References surface::area(), b, g, and surface_locker< T >::pixels().
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 711 of file utils.cpp.
References surface::area(), color_t::from_argb_bytes(), i, and surface_locker< T >::pixels().
Referenced by image::rc_modification::operator()().
Rotates a surface 180 degrees.
surf | The surface to rotate. |
Definition at line 1367 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 1407 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 1305 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 95 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 221 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 354 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 57 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()().
|
inline |
Definition at line 42 of file utils.hpp.
Referenced by image::add_localized_overlay(), image::apply_light(), image::get_hexed(), image::blit_modification::operator()(), image::mask_modification::operator()(), and image::background_modification::operator()().
void sepia_image | ( | surface & | surf | ) |
Definition at line 492 of file utils.cpp.
References surface::area(), b, g, and surface_locker< T >::pixels().
Referenced by image::sepia_modification::operator()().
void shadow_image | ( | surface & | surf, |
int | scale = 1 |
||
) |
create an heavy shadow of the image, by blurring, increasing alpha and darkening
Definition at line 589 of file utils.cpp.
References blur_alpha_surface(), surface_locker< T >::pixels(), xbrz::scale(), and surf.
Definition at line 619 of file utils.cpp.
References ALPHA, surface::area(), b, BLUE, blue, g, GREEN, green, surface_locker< T >::pixels(), RED, and red.
Referenced by image::swap_modification::operator()().
void wipe_alpha | ( | surface & | surf | ) |
Definition at line 572 of file utils.cpp.
References surface::area(), and surface_locker< T >::pixels().
Referenced by image::wipe_alpha_modification::operator()().