class IntelQA::Carrier::Grid(T)
- IntelQA::Carrier::Grid(T)
- Reference
- Object
Overview
A grid is 2D array of T
pixels
To create a grid of size 400
x 200
grid = ImageCarrier::Grid.new(400, 200)
The default background color is transparent,
but it can be passed in as a parameter or as a block
that returns the color value for each {x, y}
pair.
canvas2 = ImageCarrier::Grid.new(400, 200, RGBA::WHITE)
canvas3 = ImageCarrier::Grid.new(256, 256) do |x, y|
RGBA.from_rgb_n(x, y, 255, 8)
end
Because of the way pixels are stored in a Slice
,
Grid
s are limited to Int32::MAX = 2147483647
pixels in total,
e.g. a maximal size of 46340x46340 for a square image.
Defined in:
grid.crConstructors
Instance Method Summary
-
#==(other)
Two canvases are considered equal if they are of equal size and all their pixels are equal
-
#[](x, y)
Short form for
#get
-
#[]=(x, y, cell)
Short form for
#set
- #each(type = :grid, index = Int32::MIN, &)
-
#each_row(&)
Iterate over each row of the grid (a
Slice(RGBA)
of size@width
). - #fill(destination : GridRegion, source : Grid(T))
- #fill(destination : GridRegion, source : NamedTuple(grid: Grid(T), region: GridRegion))
- #fill(region : GridRegion, value : T)
-
#get(x, y)
Get the value of pixel
(x, y)
without checking if(x, y)
is a valid position. - #height : Int32
-
#includes_location?(x, y)
Check if pixel
(x, y)
is part of this grid. -
#map(&)
Same as
#map!
, but instead of mutating the current grid, a new one is created and returned -
#map!(&)
Modify pixels by applying a function
(color, x, y) -> new_color
to each pixel of the current grid, e.g. - #map_with_index(&)
- #map_with_index!(&block : T, Int32, Int32, Int32 -> T)
- #max
- #min
-
#paste(grid : Grid(T), x, y)
Paste the contents of a second
Grid
into this one, starting at position(x, y)
. - #pixel_type
- #pixels : Slice(T)
- #reduce(accumulator, &)
-
#safe_get(x : Int32, y : Int32) : T | Nil
Same as
#get
, but returnsnil
if(x, y)
are outside of the grid -
#safe_set(x : Int32, y : Int32, cell : T) : Bool
Same as
#set
, but only sets the pixel, if it is part of the grid. -
#set(x, y, cell)
Set the value of pixel
(x, y)
tocolor
without checking if(x, y)
is a valid position. - #tile(destination : GridRegion, source : NamedTuple(grid: Grid(T), region: GridRegion))
- #width : Int32
-
#wrapping_get(x : Int32, y : Int32) : T
Same as
#get
, but ifx
orey
are outside of the grid, wrap them over at the edges. -
#wrapping_set(x : Int32, y : Int32, cell : T)
Same as
#set
, but wrapping along the grid edges.
Constructor Detail
Instance Method Detail
Two canvases are considered equal if they are of equal size and all their pixels are equal
Iterate over each row of the grid
(a Slice(RGBA)
of size @width
).
The main usecase for this is
writing code that encodes images
in some file format.
Same as #map!
, but instead of mutating the current grid,
a new one is created and returned
Modify pixels by
applying a function (color, x, y) -> new_color
to each pixel of the current grid,
e.g. to invert colors
Paste the contents of a second Grid
into this one,
starting at position (x, y)
.
The pixels are combined using the RGBA#over
function.
Same as #get
,
but returns nil
if (x, y)
are outside of the grid
Same as #set
, but only sets the pixel,
if it is part of the grid.
Returns true
if the pixel was set successfully,
false
if it was outside of the grid.
Set the value of pixel (x, y)
to color
without checking if (x, y)
is a valid position.
Same as #get
, but if x
ore y
are outside of the grid,
wrap them over at the edges.
E.g. #wrapping_get(300, 250)
on a 200x200 grid
returns the pixel at (100, 50)
.
Same as #set
, but wrapping along the grid edges.
See #wrapping_get
for an example.