OpenTTD: src/screenshot.cpp File Reference

OpenTTD

- Main Page
- Related Pages
- Modules
- Namespaces
- Data Structures
- Files

- File List
- Globals

Data Structures | Typedefs | Functions | Variables
screenshot.cpp File Reference

The creation of screenshots! More...

`#include "stdafx.h"`
`#include "fileio_func.h"`
`#include "viewport_func.h"`
`#include "gfx_func.h"`
`#include "screenshot.h"`
`#include "blitter/factory.hpp"`
`#include "zoom_func.h"`
`#include "core/endian_func.hpp"`
`#include "saveload/saveload.h"`
`#include "company_func.h"`
`#include "strings_func.h"`
`#include "error.h"`
`#include "window_gui.h"`
`#include "window_func.h"`
`#include "tile_map.h"`
`#include "landscape.h"`
`#include "table/strings.h"`
`#include "safeguards.h"`
`#include <png.h>`

Go to the source code of this file.

## Data Structures
struct | ScreenshotFormat
| Screenshot format information. More...
struct | BitmapFileHeader
| BMP File Header (stored in little endian) More...
struct | BitmapInfoHeader
| BMP Info Header (stored in little endian) More...
struct | RgbQuad
| Format of palette data in BMP header. More...
struct | PcxHeader
| Definition of a PCX file header. More...

## Typedefs
typedef void | ScreenshotCallback (void *userdata, void *buf, uint y, uint pitch, uint n)
| Callback function signature for generating lines of pixel data to be written to the screenshot file.
typedef bool | ScreenshotHandlerProc (const char *name, ScreenshotCallback *callb, void *userdata, uint w, uint h, int pixelformat, const Colour *palette)
| Function signature for a screenshot generation routine for one of the available formats.

## Functions
| assert_compile (sizeof(BitmapFileHeader)==14)
| assert_compile (sizeof(BitmapInfoHeader)==40)
| assert_compile (sizeof(RgbQuad)==4)
static bool | MakeBMPImage (const char *name, ScreenshotCallback *callb, void *userdata, uint w, uint h, int pixelformat, const Colour *palette)
| Generic .BMP writer.
static void PNGAPI | png_my_error (png_structp png_ptr, png_const_charp message)
static void PNGAPI | png_my_warning (png_structp png_ptr, png_const_charp message)
static bool | MakePNGImage (const char *name, ScreenshotCallback *callb, void *userdata, uint w, uint h, int pixelformat, const Colour *palette)
| Generic .PNG file image writer.
| assert_compile (sizeof(PcxHeader)==128)
static bool | MakePCXImage (const char *name, ScreenshotCallback *callb, void *userdata, uint w, uint h, int pixelformat, const Colour *palette)
| Generic .PCX file image writer.
const char * | GetCurrentScreenshotExtension ()
| Get filename extension of current screenshot file format.
void | InitializeScreenshotFormats ()
| Initialize screenshot format information on startup, with _screenshot_format_name filled from the loadsave code.
static void | CurrentScreenCallback (void *userdata, void *buf, uint y, uint pitch, uint n)
| Callback of the screenshot generator that dumps the current video buffer.
static void | LargeWorldCallback (void *userdata, void *buf, uint y, uint pitch, uint n)
| generate a large piece of the world
static const char * | MakeScreenshotName (const char *default_fn, const char *ext, bool crashlog=false)
| Construct a pathname for a screenshot file.
static bool | MakeSmallScreenshot (bool crashlog)
| Make a screenshot of the current screen.
void | SetupScreenshotViewport (ScreenshotType t, ViewPort *vp)
| Configure a ViewPort for rendering (a part of) the map into a screenshot.
static bool | MakeLargeWorldScreenshot (ScreenshotType t)
| Make a screenshot of the map.
static void | HeightmapCallback (void *userdata, void *buffer, uint y, uint pitch, uint n)
| Callback for generating a heightmap.
bool | MakeHeightmapScreenshot (const char *filename)
| Make a heightmap of the current map.
bool | MakeScreenshot (ScreenshotType t, const char *name)
| Make an actual screenshot.

## Variables
static const char *const | SCREENSHOT_NAME = "screenshot"
| Default filename of a saved screenshot.
static const char *const | HEIGHTMAP_NAME = "heightmap"
| Default filename of a saved heightmap.
char | _screenshot_format_name [8]
| Extension of the current screenshot format (corresponds with _cur_screenshot_format).
uint | _num_screenshot_formats
| Number of available screenshot formats.
uint | _cur_screenshot_format
| Index of the currently selected screenshot format in _screenshot_formats.
static char | _screenshot_name [128]
| Filename of the screenshot file.
char | _full_screenshot_name [MAX_PATH]
| Pathname of the screenshot file.
struct BitmapFileHeader | GCC_PACK
static const ScreenshotFormat | _screenshot_formats []
| Available screenshot formats.

## Detailed Description

The creation of screenshots!

Definition in file screenshot.cpp.

## Typedef Documentation

typedef void ScreenshotCallback(void *userdata, void *buf, uint y, uint pitch, uint n)

Callback function signature for generating lines of pixel data to be written to the screenshot file.

Parameters

  userdata | Pointer to user data.
  buf | Destination buffer.
  y | Line number of the first line to write.
  pitch | Number of pixels to write (1 byte for 8bpp, 4 bytes for 32bpp).

See Also
  Colour

Parameters

  n | Number of lines to write.

Definition at line 50 of file screenshot.cpp.

typedef bool ScreenshotHandlerProc(const char *name, ScreenshotCallback *callb, void *userdata, uint w, uint h, int pixelformat, const Colour *palette)

Function signature for a screenshot generation routine for one of the available formats.

Parameters

  name | Filename, including extension.
  callb | Callback function for generating lines of pixels.
  userdata | User data, passed on to callb.
  w | Width of the image in pixels.
  h | Height of the image in pixels.
  pixelformat | Bits per pixel (bpp), either 8 or 32.
  palette | Colour palette (for 8bpp images).

Returns
  File was written successfully.

Definition at line 63 of file screenshot.cpp.

## Function Documentation

static void CurrentScreenCallback | ( | void * | userdata,
|  | void * | buf,
|  | uint | y,
|  | uint | pitch,
|  | uint | n
| ) |  |
| static

Callback of the screenshot generator that dumps the current video buffer.

See Also
  ScreenshotCallback

Definition at line 604 of file screenshot.cpp.

References Blitter::CopyImageToBuffer(), BlitterFactory::GetCurrentBlitter(), and Blitter::MoveTo().

Referenced by MakeSmallScreenshot().

const char* GetCurrentScreenshotExtension | ( |  | ) |

Get filename extension of current screenshot file format.

Definition at line 581 of file screenshot.cpp.

References _cur_screenshot_format, and ScreenshotFormat::extension.

Referenced by FiosMakeHeightmapName().

static void HeightmapCallback | ( | void * | userdata,
|  | void * | buffer,
|  | uint | y,
|  | uint | pitch,
|  | uint | n
| ) |  |
| static

Callback for generating a heightmap.

Supports 8bpp grayscale only.

Parameters

  userdata | Pointer to user data.
  buf | Destination buffer.
  y | Line number of the first line to write.
  pitch | Number of pixels to write (1 byte for 8bpp, 4 bytes for 32bpp).

See Also
  Colour

Parameters

  n | Number of lines to write.

See Also
  ScreenshotCallback

Definition at line 780 of file screenshot.cpp.

References _settings_game, GameSettings::construction, MapMaxX(), ConstructionSettings::max_heightlevel, TILE_ADDXY, TileHeight(), and TileXY().

Referenced by MakeHeightmapScreenshot().

void InitializeScreenshotFormats | ( |  | ) |

Initialize screenshot format information on startup, with _screenshot_format_name filled from the loadsave code.

Definition at line 587 of file screenshot.cpp.

References _cur_screenshot_format, _num_screenshot_formats, _screenshot_format_name, and lengthof.

Referenced by openttd_main().

static void LargeWorldCallback | ( | void * | userdata,
|  | void * | buf,
|  | uint | y,
|  | uint | pitch,
|  | uint | n
| ) |  |
| static

generate a large piece of the world

Parameters

  userdata | Viewport area to draw
  buf | Videobuffer with same bitdepth as current blitter
  y | First line to render
  pitch | Pitch of the videobuffer
  n | Number of lines to render

Definition at line 619 of file screenshot.cpp.

References _screen_disable_anim, ViewPort::left, min(), ScaleByZoom(), ViewPort::top, ViewPort::virtual_left, ViewPort::virtual_top, ViewPort::width, ViewPort::zoom, and ZOOM_LVL_WORLD_SCREENSHOT.

Referenced by MakeLargeWorldScreenshot().

static bool MakeBMPImage | ( | const char * | name,
|  | ScreenshotCallback * | callb,
|  | void * | userdata,
|  | uint | w,
|  | uint | h,
|  | int | pixelformat,
|  | const Colour * | palette
| ) |  |
| static

Generic .BMP writer.

Parameters

  name | file name including extension
  callb | callback used for gathering rendered image
  userdata | parameters forwarded to callb
  w | width in pixels
  h | height in pixels
  pixelformat | bits per pixel
  palette | colour palette (for 8bpp mode)

Returns
  was everything ok?

See Also
  ScreenshotHandlerProc

Definition at line 118 of file screenshot.cpp.

References Align(), AllocaM, Clamp(), free(), and min().

bool MakeHeightmapScreenshot | ( | const char * | filename | ) |

Make a heightmap of the current map.

Parameters

  filename | Filename to use for saving.

Definition at line 800 of file screenshot.cpp.

References _cur_screenshot_format, Colour::a, HeightmapCallback(), lengthof, MapSizeX(), MapSizeY(), and ScreenshotFormat::proc.

Referenced by MakeScreenshot().

static bool MakeLargeWorldScreenshot | ( | ScreenshotType | t | ) |
| static

Make a screenshot of the map.

Parameters

  t | Screenshot type: World or viewport screenshot

Returns
  true on success

Definition at line 761 of file screenshot.cpp.

References _cur_palette, _cur_screenshot_format, ScreenshotFormat::extension, BlitterFactory::GetCurrentBlitter(), Blitter::GetScreenDepth(), ViewPort::height, LargeWorldCallback(), MakeScreenshotName(), Palette::palette, ScreenshotFormat::proc, SCREENSHOT_NAME, SetupScreenshotViewport(), and ViewPort::width.

Referenced by MakeScreenshot().

static bool MakePCXImage | ( | const char * | name,
|  | ScreenshotCallback * | callb,
|  | void * | userdata,
|  | uint | w,
|  | uint | h,
|  | int | pixelformat,
|  | const Colour * | palette
| ) |  |
| static

Generic .PCX file image writer.

Parameters

  name | Filename, including extension.
  callb | Callback function for generating lines of pixels.
  userdata | User data, passed on to callb.
  w | Width of the image in pixels.
  h | Height of the image in pixels.
  pixelformat | Bits per pixel (bpp), either 8 or 32.
  palette | Colour palette (for 8bpp images).

Returns
  File was written successfully.

See Also
  ScreenshotHandlerProc

Definition at line 442 of file screenshot.cpp.

References Clamp(), DEBUG, free(), and min().

static bool MakePNGImage | ( | const char * | name,
|  | ScreenshotCallback * | callb,
|  | void * | userdata,
|  | uint | w,
|  | uint | h,
|  | int | pixelformat,
|  | const Colour * | palette
| ) |  |
| static

Generic .PNG file image writer.

Parameters

  name | Filename, including extension.
  callb | Callback function for generating lines of pixels.
  userdata | User data, passed on to callb.
  w | Width of the image in pixels.
  h | Height of the image in pixels.
  pixelformat | Bits per pixel (bpp), either 8 or 32.
  palette | Colour palette (for 8bpp images).

Returns
  File was written successfully.

See Also
  ScreenshotHandlerProc

Definition at line 264 of file screenshot.cpp.

References _grfconfig, BSWAP32(), Clamp(), free(), ScriptInfo::GetName(), BaseMedia< GraphicsSet >::GetUsedSet(), ScriptInfo::GetVersion(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, lastof, md5sumToString(), min(), GRFConfig::next, png_my_error(), png_my_warning(), seprintf(), and strecpy().

bool MakeScreenshot | ( | ScreenshotType | t,
|  | const char * | name
| ) |  |

Make an actual screenshot.

Parameters

  t | the type of screenshot to make.
  name | the name to give to the screenshot.

Returns
  true iff the screenshot was made successfully

Definition at line 819 of file screenshot.cpp.

References _cur_screenshot_format, _screenshot_name, DrawDirtyBlocks(), ScreenshotFormat::extension, HEIGHTMAP_NAME, INVALID_STRING_ID, lastof, MakeHeightmapScreenshot(), MakeLargeWorldScreenshot(), MakeScreenshotName(), MakeSmallScreenshot(), SC_CRASHLOG, SC_DEFAULTZOOM, SC_HEIGHTMAP, SC_VIEWPORT, SC_WORLD, SC_ZOOMEDIN, SetDParamStr(), ShowErrorMessage(), strecpy(), WL_ERROR, and WL_WARNING.

Referenced by MenuClickLargeWorldScreenshot(), ScreenshotConfirmCallback(), and CrashLog::WriteScreenshot().

static const char* MakeScreenshotName | ( | const char * | default_fn,
|  | const char * | ext,
|  | bool | crashlog = `false`
| ) |  |
| static

Construct a pathname for a screenshot file.

Parameters

  default_fn | Default filename.
  ext | Extension to use.
  crashlog | Create path for crash.png

Returns
  Pathname for a screenshot file.

Definition at line 674 of file screenshot.cpp.

References _full_screenshot_name, _local_company, _personal_dir, _screenshot_name, COMPANY_SPECTATOR, FileExists(), FiosGetScreenshotDir(), GenerateDefaultSaveName(), lastof, lengthof, seprintf(), strecpy(), and StrEmpty().

Referenced by MakeLargeWorldScreenshot(), MakeScreenshot(), and MakeSmallScreenshot().

static bool MakeSmallScreenshot | ( | bool | crashlog | ) |
| static

Make a screenshot of the current screen.

Definition at line 708 of file screenshot.cpp.

References _cur_palette, _cur_screenshot_format, CurrentScreenCallback(), ScreenshotFormat::extension, BlitterFactory::GetCurrentBlitter(), Blitter::GetScreenDepth(), MakeScreenshotName(), Palette::palette, ScreenshotFormat::proc, and SCREENSHOT_NAME.

Referenced by MakeScreenshot().

void SetupScreenshotViewport | ( | ScreenshotType | t,
|  | ViewPort * | vp
| ) |  |

Configure a ViewPort for rendering (a part of) the map into a screenshot.

Parameters

  | t | Screenshot type
  [out] | vp | Result viewport

Definition at line 720 of file screenshot.cpp.

References _settings_client, _settings_game, GameSettings::construction, FindWindowById(), ConstructionSettings::freeform_edges, ClientSettings::gui, ViewPort::height, ViewPort::left, MapSize(), RemapCoords(), SC_WORLD, SC_ZOOMEDIN, TILE_SIZE, TilePixelHeight(), TileX(), TileXY(), TileY(), ViewPort::top, UnScaleByZoom(), ViewPort::virtual_height, ViewPort::virtual_left, ViewPort::virtual_top, ViewPort::virtual_width, WC_MAIN_WINDOW, ViewPort::width, ViewPort::zoom, ZOOM_LVL_VIEWPORT, ZOOM_LVL_WORLD_SCREENSHOT, and GUISettings::zoom_min.

Referenced by MakeLargeWorldScreenshot(), and MenuClickLargeWorldScreenshot().

## Variable Documentation

const ScreenshotFormat _screenshot_formats[]
| static

Initial value:
{
{"png", &MakePNGImage},
{"bmp", &MakeBMPImage},
{"pcx", &MakePCXImage},
}

Available screenshot formats.

Definition at line 572 of file screenshot.cpp.