HsvToRgb: различия между версиями

Материал из MajorDoMo инфо
(Новая страница: «Category:Встроенные функции ==Описание== '''hsvToRgb'''($h, $s, $v); -- ==Примеры запросов== ==Альтернати...»)
 
 
Строка 3: Строка 3:
'''hsvToRgb'''($h, $s, $v); --  
'''hsvToRgb'''($h, $s, $v); --  
==Примеры запросов==
==Примеры запросов==
$color = gg('Object.Value');
$HSV=$color;
$H=hexdec(substr($HSV,0,4));
$S=hexdec(substr($HSV,4,4));
$V=hexdec(substr($HSV,8,4));
//$H = $H/360;
//$S = $S/1000;
//$V = $V/1000;
$S = $S/10;
$V = $V/10;
//echo '<BR>-------<BR>';
//echo 'H: ';
//echo $H;
//echo '<BR>-------<BR>';
//echo 'S: ';
//echo $S;
//echo '<BR>-------<BR>';
//echo 'V: ';
//echo $V;
//echo '<BR>-------<BR>';
var_dump(hsv2rgb($H, $S, $V));
  function hsv2rgb($hue,$sat,$val) {
    $rgb = array(0,0,0);
    //calc rgb for 100% SV, go +1 for BR-range
    for($i=0;$i<4;$i++) {
      if (abs($hue - $i*120)<120) {
        $distance = max(60,abs($hue - $i*120));
        $rgb[$i % 3] = 1 - (($distance-60) / 60);
      }
    }
    //desaturate by increasing lower levels
    $max = max($rgb);
    $factor = 255 * ($val/100);
    for($i=0;$i<3;$i++) {
      //use distance between 0 and max (1) and multiply with value
      $rgb[$i] = round(($rgb[$i] + ($max - $rgb[$i]) * (1 - $sat/100)) * $factor);
    }
    $rgb['html'] = sprintf('#%02X%02X%02X', $rgb[0], $rgb[1], $rgb[2]);
    echo "<strong>Хуе:</strong> $hue<br><br>\r\n";
    echo "<strong>Сат:</strong> $sat<br><br>\r\n";
    echo "<strong>Вал:</strong> $val<br><br>\r\n";
    echo $rgb;
    sg('Object.Value', sprintf( '#%02X%02X%02X', $rgb[0], $rgb[1], $rgb[2]));
    return $rgb;
  }


==Альтернативные названия функции (сленг)==
==Альтернативные названия функции (сленг)==


==Просто для проверки появления разделов==
==Просто для проверки появления разделов==

Текущая версия от 19:27, 15 января 2023

Описание

hsvToRgb($h, $s, $v); --

Примеры запросов

$color = gg('Object.Value'); $HSV=$color;

$H=hexdec(substr($HSV,0,4)); $S=hexdec(substr($HSV,4,4)); $V=hexdec(substr($HSV,8,4));

//$H = $H/360; //$S = $S/1000; //$V = $V/1000; $S = $S/10; $V = $V/10; //echo '
-------
'; //echo 'H: '; //echo $H; //echo '
-------
'; //echo 'S: '; //echo $S; //echo '
-------
'; //echo 'V: '; //echo $V; //echo '
-------
'; var_dump(hsv2rgb($H, $S, $V));

 function hsv2rgb($hue,$sat,$val) {
   $rgb = array(0,0,0);
   //calc rgb for 100% SV, go +1 for BR-range
   for($i=0;$i<4;$i++) {
     if (abs($hue - $i*120)<120) {
       $distance = max(60,abs($hue - $i*120));
       $rgb[$i % 3] = 1 - (($distance-60) / 60);
     }
   }
   //desaturate by increasing lower levels
   $max = max($rgb);
   $factor = 255 * ($val/100);
   for($i=0;$i<3;$i++) {
     //use distance between 0 and max (1) and multiply with value
     $rgb[$i] = round(($rgb[$i] + ($max - $rgb[$i]) * (1 - $sat/100)) * $factor);
   }
   $rgb['html'] = sprintf('#%02X%02X%02X', $rgb[0], $rgb[1], $rgb[2]); 
   echo "Хуе: $hue

\r\n"; echo "Сат: $sat

\r\n"; echo "Вал: $val

\r\n"; echo $rgb; sg('Object.Value', sprintf( '#%02X%02X%02X', $rgb[0], $rgb[1], $rgb[2])); return $rgb;
 }

Альтернативные названия функции (сленг)

Просто для проверки появления разделов