Qrc.Matrix
QR 2D matrices.
The type for sequence of bits.
The type for 2D square matrices of modules (binary pixels).
For a matrix of width w
, the module at position (0,0
) is the top-left corner, and (w-1,w-1)
is the bottom-right corner. The quiet zone (surrounding frame of four zero modules) is not included. We store the bits in row-major order.
val zero : w:int -> t
zero ~w
is a matrix of zeros of size w
.
of_bits ~w bits
is a matrix from the sequence of bits bits
interpreted in row-major order. Exceeding final bits are ignored.
val w : t -> int
w m
is the matrix width.
bits m
are the matrix's bits (modules) in row-major order. If there are more bits than (w m) * (w m)
, exceeding final bits should be ignored.
val get : t -> x:int -> y:int -> bool
get m ~x ~y
is the (x,y)
module of m
.
val set : t -> x:int -> y:int -> unit
set m ~x ~y v
sets the (x,y)
module of m
to true
.
val clear : t -> x:int -> y:int -> unit
clear m ~x ~y
sets the (x,y)
module of m
to false
.
val fold : (int -> int -> bool -> 'a -> 'a) -> t -> 'a -> 'a
fold f m acc
folds f
over all the modules (x,y)
of m
as f x
y (get m ~x ~y) acc'
in row-major order and starting with acc
.
val to_svg : ?w_mm:int -> ?invert:bool -> ?quiet_zone:bool -> t -> string
to_svg ~w_mm ~invert ~quiet_zone m
is an SVG image for m
in a coordinate system using one (slightly larger) unit black square per set module. The image, including the quiet zone, has a width and height of w_mm
millimeters (defaults to 50
). If invert
is true
(defaults to false
) black modules are white and vice-versa. If quiet_zone
is true
(default) the surrounding frame of four zero modules is included.