Get (Graphics)
Gets a copy of a portion of the current work page or an image buffer
Syntax
`
Get [source,] [Step] (x1, y1) - [STEP] (x2, y2), dest]
`
Parameters
`source`
the address of an image buffer.
`Step`
indicates that the following co-ordinates are not absolute co-ordinates.
`x1`, `y1`
co-ordinates of the upper-left corner of the sub-image to copy.
`x2`, `y2`
co-ordinates of the lower-right corner of the sub-image to copy.
`dest`
the address of a previously allocated buffer to store the image data.
Description
`Get` copies a rectangular portion of the current work page specified by the co-ordinates (`x1`, `y1`) and (`x2`, `y2`), which represent the upper-left and lower-right corners of the rectangle, respectively. `Step` specifies that the upper-left co-ordinates are relative to the current graphics pen location, and/or that the lower-right co-ordinates are relative to the upper-left co-ordinates. The new image buffer is formatted to match the current screen mode pixel format.
`dest` can be an address, an array, or a reference to the first element in an array that will receive the new image buffer. This memory must be sufficiently allocated to hold the image buffer; the number of bytes required varies with the -lang dialect used to compile the program.
`source` can be an address, an array, or a reference to the first element in an array that holds an image buffer to retrieve a portion of. `x1`, `y1`, `x2`, `y2`, `Step` and `dest` have the same meaning in this case.
The co-ordinates of the rectangle are affected by the most recent `Window` and `View (Graphics)` statements, and must both be within the current clipping region set by `View (Graphics)`, otherwise an illegal function call runtime error will be triggered, and the function will have no effect.
Runtime errors:
`Get` throws one of the following runtime errors:
(`1`) Illegal function call

- `dest` is an array, but is not big enough to hold the image buffer.
- The upper-left or lower-right co-ordinates of the rectangle are outside the current clipping region. See `View (Graphics)`.

Dialect Differences
There are 2 types of buffers (details see GfxInternalFormats) depending from FB dialect used:

- In the -lang fb dialect, `dest` receives a new-style image buffer, which consists of a 32-byte image header followed by pixel data which is row-padded to the next paragraph boundary (16 bytes). Use the following formula to calculate the total size, in bytes, required to store the image buffer, where `w` and `h` are the respective width and height of the rectangular portion of the current work page or source image buffer, and `bpp` is the number of bytes per pixel of the current screen mode:

`size = 32 + (((w * bpp + &hF) and not &hF) * h)`

- In the -lang qb and -lang fblite dialects, `dest` receives a QB-style image buffer, which consists of a 4-byte image header followed by pixel data which is not row-padded. Use the following formula to calculate the total size, in bytes, required to store the image buffer, where `w` and `h` are the respective width and height of the rectangular portion of the current work page or source image buffer, and `bpp` is the number of bytes per pixel of the current screen mode:

`size = 4 + (w * h * bpp)`
Example
For an example see `Put (Graphics)`.
See also

- `Put (Graphics)`
- `Get (File I/O)`
- `Screen (Graphics)`
- `Window`
- `View (Graphics)`
- Internal graphics formats