mirror of
https://github.com/chillerlan/php-qrcode.git
synced 2026-08-30 03:58:28 +00:00
:octocat: +QRMatrix::checkNeighbours()
This commit is contained in:
@@ -50,6 +50,24 @@ class QRMatrix{
|
||||
/** @var int */
|
||||
public const IS_DARK = 0b100000000000;
|
||||
|
||||
/**
|
||||
* Map of flag => coord
|
||||
*
|
||||
* @see \chillerlan\QRCode\Data\QRMatrix::checkNeighbours()
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected const neighbours = [
|
||||
0b00000001 => [-1, -1],
|
||||
0b00000010 => [ 0, -1],
|
||||
0b00000100 => [ 1, -1],
|
||||
0b00001000 => [ 1, 0],
|
||||
0b00010000 => [ 1, 1],
|
||||
0b00100000 => [ 0, 1],
|
||||
0b01000000 => [-1, 1],
|
||||
0b10000000 => [-1, 0]
|
||||
];
|
||||
|
||||
/**
|
||||
* the used mask pattern, set via QRMatrix::mask()
|
||||
*/
|
||||
@@ -235,6 +253,35 @@ class QRMatrix{
|
||||
return $this->checkType($x, $y, $this::IS_DARK);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks the status neighbouring modules of the given module at ($x, $y) and returns a bitmask with the results.
|
||||
*
|
||||
* The 8 flags of the bitmask represent the status of each of the neighbouring fields,
|
||||
* starting with the lowest bit for top left, going clockwise:
|
||||
*
|
||||
* 1 2 3
|
||||
* 8 # 4
|
||||
* 7 6 5
|
||||
*/
|
||||
public function checkNeighbours(int $x, int $y, int $M_TYPE_VALUE = null):int{
|
||||
$bits = 0;
|
||||
|
||||
foreach($this::neighbours as $bit => $coord){
|
||||
[$ix, $iy] = $coord;
|
||||
|
||||
// check if the field is the same type
|
||||
if($M_TYPE_VALUE !== null && ($this->get($x + $ix, $y + $iy) | $this::IS_DARK) !== ($M_TYPE_VALUE | $this::IS_DARK)){
|
||||
continue;
|
||||
}
|
||||
|
||||
if($this->checkType($x + $ix, $y + $iy, $this::IS_DARK)){
|
||||
$bits |= $bit;
|
||||
}
|
||||
}
|
||||
|
||||
return $bits;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the "dark module", that is always on the same position 1x1px away from the bottom left finder
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user