| <?php |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| namespace Zxing\Common; |
|
|
| use Zxing\NotFoundException; |
|
|
| |
| |
| |
| final class DefaultGridSampler extends GridSampler |
| { |
| |
| public function sampleGrid( |
| $image, |
| $dimensionX, |
| $dimensionY, |
| $p1ToX, $p1ToY, |
| $p2ToX, $p2ToY, |
| $p3ToX, $p3ToY, |
| $p4ToX, $p4ToY, |
| $p1FromX, $p1FromY, |
| $p2FromX, $p2FromY, |
| $p3FromX, $p3FromY, |
| $p4FromX, $p4FromY |
| ) { |
|
|
| $transform = PerspectiveTransform::quadrilateralToQuadrilateral( |
| $p1ToX, $p1ToY, $p2ToX, $p2ToY, $p3ToX, $p3ToY, $p4ToX, $p4ToY, |
| $p1FromX, $p1FromY, $p2FromX, $p2FromY, $p3FromX, $p3FromY, $p4FromX, $p4FromY); |
|
|
| return $this->sampleGrid_($image, $dimensionX, $dimensionY, $transform); |
| } |
|
|
| |
| public function sampleGrid_( |
| $image, |
| $dimensionX, |
| $dimensionY, |
| $transform |
| ) { |
| if ($dimensionX <= 0 || $dimensionY <= 0) { |
| throw NotFoundException::getNotFoundInstance(); |
| } |
| $bits = new BitMatrix($dimensionX, $dimensionY); |
| $points = fill_array(0, 2 * $dimensionX, 0.0); |
| for ($y = 0; $y < $dimensionY; $y++) { |
| $max = count($points); |
| $iValue = (float)$y + 0.5; |
| for ($x = 0; $x < $max; $x += 2) { |
| $points[$x] = (float)($x / 2) + 0.5; |
| $points[$x + 1] = $iValue; |
| } |
| $transform->transformPoints($points); |
| |
| |
| $this->checkAndNudgePoints($image, $points); |
| try { |
| for ($x = 0; $x < $max; $x += 2) { |
| if ($image->get((int)$points[$x], (int)$points[$x + 1])) { |
| |
| $bits->set($x / 2, $y); |
| } |
| } |
| } catch (\Exception $aioobe) { |
| |
| |
| |
| |
| |
| |
| |
| throw NotFoundException::getNotFoundInstance(); |
| } |
| } |
|
|
| return $bits; |
| } |
| } |
|
|