#include "color_range.hpp"
#include "color.hpp"
#include "sdl/surface.hpp"
#include "utils/math.hpp"
#include "game_version.hpp"
#include <SDL2/SDL.h>
#include <cstdlib>
#include <map>
#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::fill_surface_rect (surface &dst, SDL_Rect *dst_rect, const uint32_t color) |
Fill a rectangle on a given surface. 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_nn (const surface &surf, int w, int h) |
Scale a surface using the nearest neighbor algorithm (provided by xBRZ lib) 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... | |
surface | adjust_surface_color (const surface &surf, int r, int g, int b) |
surface | greyscale_image (const surface &surf) |
surface | monochrome_image (const surface &surf, const int threshold) |
surface | sepia_image (const surface &surf) |
surface | negative_image (const surface &surf, const int thresholdR, const int thresholdG, const int thresholdB) |
surface | alpha_to_greyscale (const surface &surf) |
surface | wipe_alpha (const surface &surf) |
surface | shadow_image (const surface &surf, int scale=1) |
create an heavy shadow of the image, by blurring, increasing alpha and darkening More... | |
surface | swap_channels_image (const surface &surf, channel r, channel g, channel b, channel a) |
surface | recolor_image (surface surf, const color_range_map &map_rgb) |
Recolors a surface using a map with source and converted palette values. More... | |
surface | brighten_image (const 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) |
surface | adjust_surface_alpha_add (const surface &surf, int amount) |
surface | mask_surface (const 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... | |
surface | light_surface (const surface &surf, const surface &lightmap) |
Light surf using lightmap. More... | |
surface | blur_surface (const surface &surf, int depth=1) |
Cross-fades a surface. More... | |
void | blur_surface (surface &surf, SDL_Rect rect, int depth=1) |
Cross-fades a surface in place. More... | |
surface | blur_alpha_surface (const 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... | |
surface | blend_surface (const 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... | |
surface | flip_surface (const surface &surf) |
surface | flop_surface (const surface &surf) |
SDL_Rect | get_non_transparent_portion (const surface &surf) |
void | put_pixel (const surface &surf, surface_lock &surf_lock, int x, int y, uint32_t pixel) |
Helper methods for setting/getting a single pixel in an image. More... | |
uint32_t | get_pixel (const surface &surf, const const_surface_lock &surf_lock, int x, int y) |
void adjust_surface_alpha | ( | surface & | surf, |
uint8_t | alpha_mod | ||
) |
Definition at line 984 of file utils.cpp.
References b, surface::clone(), g, surface_locker< T >::pixels(), and PLAIN_LOG.
Definition at line 484 of file utils.cpp.
References b, surface::clone(), g, surface_locker< T >::pixels(), and PLAIN_LOG.
Referenced by image::apply_light(), image::get_tod_colored(), image::getMinimap(), and image::cs_modification::operator()().
Definition at line 699 of file utils.cpp.
References surface::clone(), surface_locker< T >::pixels(), and PLAIN_LOG.
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 1544 of file utils.cpp.
References a, b, surface::clone(), g, surface_locker< T >::pixels(), and PLAIN_LOG.
Referenced by image::blend_modification::operator()().
Cross-fades a surface with alpha channel.
surf | The source surface. |
depth | The depth of the blurring. |
Definition at line 1339 of file utils.cpp.
References surface::clone(), p, surface_locker< T >::pixels(), and PLAIN_LOG.
Referenced by image::bl_modification::operator()(), and shadow_image().
Cross-fades a surface.
surf | The source surface. |
depth | The depth of the blurring. |
Definition at line 1204 of file utils.cpp.
References surface::clone(), and PLAIN_LOG.
Referenced by gui2::canvas::draw().
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 1223 of file utils.cpp.
References p, and surface_locker< T >::pixels().
Definition at line 933 of file utils.cpp.
References b, surface::clone(), fixed_point_multiply(), g, surface_locker< T >::pixels(), and PLAIN_LOG.
Cuts a rectangle from a surface.
Definition at line 1486 of file utils.cpp.
References surface_locker< T >::pixels(), PLAIN_LOG, and utf8::size().
Referenced by image::get_hexed(), image::load_image_sub_file(), and image::crop_modification::operator()().
Definition at line 1779 of file utils.cpp.
References surface::clone(), surface_locker< T >::pixels(), PLAIN_LOG, and swap().
Referenced by image::fl_modification::operator()().
Definition at line 1808 of file utils.cpp.
References surface::clone(), surface_locker< T >::pixels(), PLAIN_LOG, and swap().
Referenced by image::fl_modification::operator()().
SDL_Rect get_non_transparent_portion | ( | const surface & | surf | ) |
Definition at line 1888 of file utils.cpp.
References surface::clone(), n, surface_locker< T >::pixels(), and PLAIN_LOG.
uint32_t get_pixel | ( | const surface & | surf, |
const const_surface_lock & | surf_lock, | ||
int | x, | ||
int | y | ||
) |
Definition at line 1679 of file utils.cpp.
References surface_locker< T >::pixels().
Referenced by rotate_any_surface().
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 1837 of file utils.cpp.
References PLAIN_LOG.
Definition at line 529 of file utils.cpp.
References b, surface::clone(), g, surface_locker< T >::pixels(), and PLAIN_LOG.
Referenced by image::gs_modification::operator()().
Check if a surface fit into a mask.
Definition at line 1092 of file utils.cpp.
References surface::clone(), surface_locker< T >::pixels(), and PLAIN_LOG.
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 1138 of file utils.cpp.
References b, surface::clone(), g, surface_locker< T >::pixels(), and PLAIN_LOG.
Referenced by image::apply_light(), and image::light_modification::operator()().
surface mask_surface | ( | const surface & | surf, |
const surface & | mask, | ||
bool * | empty_result = nullptr , |
||
const std::string & | filename = std::string() |
||
) |
Applies a mask on a surface.
Definition at line 1022 of file utils.cpp.
References b, surface::clone(), 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()().
Definition at line 574 of file utils.cpp.
References b, surface::clone(), g, surface_locker< T >::pixels(), and PLAIN_LOG.
Referenced by image::bw_modification::operator()().
surface negative_image | ( | const surface & | surf, |
const int | thresholdR, | ||
const int | thresholdG, | ||
const int | thresholdB | ||
) |
Definition at line 656 of file utils.cpp.
References b, surface::clone(), g, surface_locker< T >::pixels(), and PLAIN_LOG.
Referenced by image::negative_modification::operator()().
void put_pixel | ( | const surface & | surf, |
surface_lock & | surf_lock, | ||
int | x, | ||
int | y, | ||
uint32_t | pixel | ||
) |
Helper methods for setting/getting a single pixel in an image.
Lifted from http://sdl.beuc.net/sdl.wiki/Pixel_Access
surf | The image to get or receive the pixel from. |
surf_lock | The locked surface to make sure the pointers are valid. |
x | The position in the row of the pixel. |
y | The row of the pixel. |
pixel | The pixel value. |
Definition at line 1648 of file utils.cpp.
References surface_locker< T >::pixels().
Referenced by rotate_any_surface().
surface 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 894 of file utils.cpp.
References surface::clone(), color_t::from_argb_bytes(), i, surface_locker< T >::pixels(), and PLAIN_LOG.
Referenced by image::rc_modification::operator()().
Rotates a surface 180 degrees.
surf | The surface to rotate. |
Definition at line 1702 of file utils.cpp.
References surface::clone(), is_odd(), surface_locker< T >::pixels(), PLAIN_LOG, 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 1744 of file utils.cpp.
References surface_locker< T >::pixels(), and PLAIN_LOG.
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 1591 of file utils.cpp.
References get_pixel(), put_pixel(), xbrz::scale(), and scale_surface().
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 129 of file utils.cpp.
References a, b, e, fixed_point_divide(), fixed_point_to_int(), g, h, n, surface_locker< T >::pixels(), PLAIN_LOG, s, 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 258 of file utils.cpp.
References a, b, fixed_point_divide(), fixed_point_to_int(), g, h, surface_locker< T >::pixels(), PLAIN_LOG, and w.
Referenced by image::scale_modification::operator()().
Scale a surface using the nearest neighbor algorithm (provided by xBRZ lib)
surf | The sources surface |
w | The width of the resulting surface. |
h | The height of the resulting surface. |
Definition at line 92 of file utils.cpp.
References h, xbrz::nearestNeighborScale(), surface_locker< T >::pixels(), PLAIN_LOG, and w.
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 395 of file utils.cpp.
References a, b, g, h, surface_locker< T >::pixels(), PLAIN_LOG, and w.
Referenced by image::getMinimap(), 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 55 of file utils.cpp.
References surface_locker< T >::pixels(), PLAIN_LOG, and xbrz::scale().
Referenced by image::xbrz_modification::operator()().
|
inline |
Definition at line 57 of file utils.hpp.
Referenced by image::add_localized_overlay(), image::apply_light(), image::get_hexed(), image::getMinimap(), image::blit_modification::operator()(), image::mask_modification::operator()(), and image::background_modification::operator()().
Definition at line 614 of file utils.cpp.
References b, surface::clone(), g, surface_locker< T >::pixels(), and PLAIN_LOG.
Referenced by image::sepia_modification::operator()().
create an heavy shadow of the image, by blurring, increasing alpha and darkening
Definition at line 755 of file utils.cpp.
References blur_alpha_surface(), surface_locker< T >::pixels(), PLAIN_LOG, and xbrz::scale().
Definition at line 792 of file utils.cpp.
References a, ALPHA, b, BLUE, surface::clone(), g, GREEN, surface_locker< T >::pixels(), PLAIN_LOG, and RED.
Referenced by image::swap_modification::operator()().
Definition at line 727 of file utils.cpp.
References surface::clone(), surface_locker< T >::pixels(), and PLAIN_LOG.
Referenced by image::wipe_alpha_modification::operator()().