Umrechnung Variable mit Profil HexColor

Ich möchteim Web-IF die neuen coolen RGB-Einstellregler (Variablenprofil ~HexColor) für meine DMX-Beleuchung einsetzen. Dazu muss ich einerseits die jeweiligen Doppel-Bytes für die Farben Rot, Grün und Blau in einzelne Variablen schreiben, andererseits mit einem Timer-gesteuerten Skript einen Farbwechsel durchführen, der sich auch in der Anzeige der Schieberegler widerspiegelt.

Aber der Reihe nach: Meine erste Frage ist, wie ich in PHP aus dem Inhalt der Variable die den 6-Byte-Wert für die Farben RGB enthält, drei einzelne Variablen für Rot, Grün und Blau setzen kann? Da ich absoluter PHP-Neuling bin, wäre ein Code-Schnipsel für mich recht hilfreich!

Vielen Dank!

Robert

Robert versuche es damit:

	$Color = GetValueInteger(17727); 
	$rot   = floor($Color/65536); 
	$blau  = floor(($Color-($rot*65536))/256);
	$gruen = $Color-($blau*256)-($rot*65536);
	DMX_SetValue(51878 /*[DMX\DMX Output Devices Wohnzimmer]*/, 1, $rot);
	DMX_SetValue(51878 /*[DMX\DMX Output Devices Wohnzimmer]*/, 2, $blau);
	DMX_SetValue(51878 /*[DMX\DMX Output Devices Wohnzimmer]*/, 3, $gruen);

Habe ich selber erst heute mittag zusammen geschrieben.
Was ein Zufall:D

Super! Das funktioniert schon mal wie gewünscht:D

Vielen Dank!

Das ist ja die Umrechnung von Hex zu Dec für RGB.

Kann mir jemand ein ähnliches Script posten umd genau anders herum zu berechnen?

Also von RGB-Dec auf Hex-Wert.

Danke und Gruß
Dirk

Du meinst so etwas

<?
$r = 255;
$g = 0;
$b = 255;
$hex = rgb2hex($r, $g, $b);
echo "#".$hex;
 
// Function R, G, B nach HEX
function rgb2hex($r, $g=-1, $b=-1) {
    if (is_array($r) && sizeof($r) == 3)
      list($r, $g, $b) = $r;
    $r = intval($r);
    $g = intval($g);
    $b = intval($b);
    $r = dechex($r<0?0:($r>255?255:$r));
    $g = dechex($g<0?0:($g>255?255:$g));
    $b = dechex($b<0?0:($b>255?255:$b));
    $color = (strlen($r) < 2?'0':'').$r;
    $color .= (strlen($g) < 2?'0':'').$g;
    $color .= (strlen($b) < 2?'0':'').$b;
    return $color;
}
?>

Genau das meinte ich.

Vielen Dank!

Gruß
Dirk

Hi,

I need the $rot, $blau and $gruen always te be a three digit number. So 24 should be 024.

I there a way to do this?

Albert

function HexColor2Dec($color)
{
    $rot = $color >> 16;
    $gruen = ($color & 0x00FF00) >> 8;
    $blau = $color & 0x0000FF;
    return array(sprintf("%03d ",$rot), sprintf("%03d ",$gruen), sprintf("%03d ",$blau));
}

Aufruf, z.B. echo $Color[0]; usw…

Sorry, I don’t get this working.

Should this replace the whole previous script of should it be put behind the script??

I don’t see any echo (pop-up screen)?

Albert

Das ist eine Funktion, wo die steht, ist egal. Als Eingangsvariable, wird ein Integer benötigt.

Hi

<?

echo hexdec("FF7F00")."
";

print_r(HexColor2Dec('16744192'));
echo "Red: ".HexColor2Dec('16744192')[0];
echo "Green: ".HexColor2Dec('16744192')[1];
echo "Blue: ".HexColor2Dec('16744192')[2];
 

 
function HexColor2Dec($color)
{
    $rot = $color >> 16;
    $gruen = ($color & 0x00FF00) >> 8;
    $blau = $color & 0x0000FF;
    return array(sprintf("%03d ",$rot), sprintf("%03d ",$gruen), sprintf("%03d ",$blau));
}
?>

the output is in the scripteditor

OK, I got this working, thanks.

I had to turn the function and print_r because I got an error first.

Still learning :slight_smile:

Albert


<?

$hexcolor = 58368  /*[Scripts\Test Scripts\Kleurinstelling]*/;

if ($IPS_SENDER == "WebFront")
{SetValue($IPS_VARIABLE, $IPS_VALUE);

$color = GetValueInteger($hexcolor);

function HexColor2Dec($color)
{
    $rood  = $color >> 16;
    $groen = ($color & 0x00FF00) >> 8;
    $blauw = $color & 0x0000FF;
    return array(sprintf("%03d",$rood), sprintf("%03d",$groen), sprintf("%03d",$blauw));
}

print_r(HexColor2Dec($color));
echo "Rood: ".HexColor2Dec($color)[0]." ";
echo "Groen: ".HexColor2Dec($color)[1]." ";
echo "Blauw: ".HexColor2Dec($color)[2]." ";

$sendcolor = "w0-".HexColor2Dec($color)[0]."-".HexColor2Dec($color)[1]."-".HexColor2Dec($color)[2];
//$sendcolor = "n0";

echo $sendcolor;

COMPort_SendText(21575 /*[Serial Port Arduino]*/, $sendcolor);

}

?>

@Werner,

wie der Name der Funktion schon sagt. :wink:

<?
$rgb = HexColor2Dec(0xff0d4d);
print_r($rgb);

function HexColor2Dec($color)
{
    $rot = $color >> 16;
    $gruen = ($color & 0x00FF00) >> 8;
    $blau = $color & 0x0000FF;
   return array(sprintf("%03d ",$rot), sprintf("%03d ",$gruen), sprintf("%03d ",$blau));
}

echo "Color: ".$rgb[0], $rgb[1], $rgb[2];
?>
Array
(
    [0] => 255 
    [1] => 013 
    [2] => 077 
)
Color: 255 013 077 

Bemerkte ich auch erst später :rolleyes:

0x… ist das Zaubermittel.

Habe es auch gleich wieder gelöscht :wink: