/**
* Returns pixel analysis in a rectangular area
*
* @param Point $a
* @param Point $b
* @param float $tolerance
* @return Area
*/
protected function rectangleArea(Point $a, Point $b, $tolerance)
{
$imagick = $this->getImagick();
$width = $b->getX() - $a->getX();
$height = $b->getY() - $a->getY();
$pixels = $imagick->exportImagePixels($a->getX(), $a->getY(), $width, $height, "I", Imagick::PIXEL_CHAR);
$counts = array_count_values($pixels);
$blacks = 0;
$whites = 0;
foreach ($counts as $k => $qtd) {
if ($k == -1) {
$whites += $qtd;
} else {
$blacks += $qtd;
}
}
$area = new Area(count($pixels), $whites, $blacks);
//Add draw debug
$this->draw->setStrokeOpacity(1);
$this->draw->setFillOpacity(0);
$this->draw->setStrokeWidth(2);
$this->draw->setStrokeColor($area->percentBlack() >= $tolerance ? "#0000CC" : "#CC0000");
$this->draw->rectangle($a->getX(), $a->getY(), $b->getX(), $b->getY());
return $area;
}