<?php
 
/* PIMG module: scans a rectangle and returns an array of pimg_pixel instances for each pixel */
 
class pimg_scan
 
{
 
    /* Resources */
 
    private $pimg;
 
    
 
    // PIMG constructor
 
    function __construct($pimg)
 
    {
 
        $this -> pimg = $pimg;
 
    }
 
    
 
    
 
    
 
    /*
 
        Scans a rectangle defined by it's start points x, y and width and height.
 
        @param: $x - x of start point
 
        @param: $y - y of start point
 
        @param: $width - rectangle width
 
        @param: $height - rectangle height
 
        @result: an array of pimg_pixel instances for each pixel
 
    */
 
    function init($x = 0, $y = 0, $width = 1, $height = 1)
 
    {
 
        /* INPUT VALIDATORS */
 
        if ($x < 0)
 
        {
 
            $x = 0;
 
            $this -> pimg -> setDebug('X start point must be >= 0, using 0 as default', 'notice', __CLASS__);
 
        }
 
        if ($y < 0)
 
        {
 
            $y = 0;
 
            $this -> pimg -> setDebug('Y start point must be >= 0, using 0 as default', 'notice', __CLASS__);
 
        }
 
        if ($width <= 0)
 
        {
 
            $this -> pimg -> setDebug('Width of selection must be > 0, using 1 as default', 'notice', __CLASS__);
 
            $width = 1;
 
        }
 
        if ($height <= 0)
 
        {
 
            $this -> pimg -> setDebug('Height of selection must be > 0, using 1 as default', 'notice', __CLASS__);
 
            $height = 1;
 
        }
 
        if ($x + $width > $this -> pimg -> width())
 
        {
 
            $width = $this -> pimg -> width() - $x;
 
            $this -> pimg -> setDebug('Selection\'s destination width is out of image\'s bounds, will scan till the end', 'notice', __CLASS__);
 
        }
 
        if ($y + $height > $this -> pimg -> height())
 
        {
 
            $height = $this -> pimg -> height() - $y;
 
            $this -> pimg -> setDebug('Selection\'s destination height is out of image\'s bounds, will scan till the end', 'notice', __CLASS__);
 
        }
 
        
 
        // Go through all pixels
 
        $result = array();
 
        for($i = 0; $i < $width; $i++)
 
            for($j = 0; $j < $height; $j++)
 
            {
 
                $color = imagecolorsforindex($this -> pimg -> handle(), imagecolorat($this -> pimg -> handle(), $x + $i, $y + $j));
 
                $result[$i][$j] = $this -> pimg -> pixel($x + $i, $y + $j, $this -> pimg -> color($color['red'], $color['green'], $color['blue'], $color['alpha']));
 
            }
 
        
 
        // Return the matrix
 
        return $result;
 
    }
 
}
 
?>
 
 |