Вход Регистрация
Файл: toolkit/AcColor.php
Строк: 130
<?php

/**
 * @package image
 *
 * @author Антон Кургузенков <kurguzenkov@list.ru>
 *
 * @version 0.01
 * @since 2012-11-11
 */

require_once 'geometry/exceptions.php';

/**
 * Класс, описывающий цвет в RGB формате
 */

class AcColor
{
    
/**
     * Интенсивность красного канала.
     * @var int
     */

    
private $red;

    
/**
     * Интенсивность зелёного канала.
     * @var int
     */

    
private $green;

    
/**
     * Интенсивность синего канала.
     * @var int
     */

    
private $blue;

    const 
WHITE 16777215// pow(2, 8 * 3) || 0xFFFFFF
    
const BLACK 0;

    public function 
__construct() // $r, $g, $b || $code
    
{
        
$a func_get_args();
        if (
count($a) == 3)
        {
            
$this->setRed($a[0]);
            
$this->setGreen($a[1]);
            
$this->setBlue($a[2]);
        }
        else if (
count($a) == 1)
        {
            if (!
self::isValidCode($a[0]))
                throw new 
IllegalArgumentException();

            
$hexCode dechex($a[0]);
            
$r hexdec(substr($hexCode02));
            
$g hexdec(substr($hexCode22));
            
$b hexdec(substr($hexCode42));
            
$this->__construct($r$g$b);
        }
    }

    
/**
     * Устанавливает, валидна ли интенсивность цветового канала.
     *
     * @param $channel иненсивность канала
     * @return boolean
     */

    
public static function isValidChanel($channel)
    {
        return 
is_integer($channel) && $channel >=&& $channel 256;
    }

    
/**
     * Устанавливает, валиден ли код цвета.
     *
     * @param int $code
     * @return boolean
     */

    
public static function isValidCode($code)
    {
        return 
is_integer($code) && $code >= && $code <= self::WHITE;
    }

    
/**
     * @ignore
     */

    
private function convert10To16($channel)
    {
        if (
$channel 16)
        {
            return 
"0".dechex($channel);
        }
        return 
dechex($channel);
    }

    
/**
     * Возвращает шестнадцатиричный код цвета в формате 0xRRGGBB
     * @return string
     */

    
public function getHexCode()
    {
        
$r $this->convert10To16($this->red);
        
$g $this->convert10To16($this->green);
        
$b $this->convert10To16($this->blue);

        return 
"0x$r$g$b";
    }

    
// getters and setters

    
public function getCode()
    {
        return 
hexdec($this->getHexCode());
    }

    
/**
     * @param int
     * @throws InvalidChannelException
     */

    
public function setRed($red)
    {
        if (
self::isValidChanel($red))
            
$this->red $red;
        else
            throw new 
InvalidChannelException('red');
    }

    
/**
     * @param int
     * @throws InvalidChannelException
     */

    
public function setGreen($green)
    {
        if (
self::isValidChanel($green))
            
$this->green $green;
        else
            throw new 
InvalidChannelException('green');
    }

    
/**
     * @param int
     * @throws InvalidChannelException
     */

    
public function setBlue($blue)
    {
        if (
self::isValidChanel($blue))
            
$this->blue $blue;
        else
            throw new 
InvalidChannelException('blue');
    }

    public function 
getRed()
    {
        return 
$this->red;
    }

    public function 
getGreen()
    {
        return 
$this->green;
    }

    public function 
getBlue()
    {
        return 
$this->blue;
    }
}
?>
Онлайн: 0
Реклама