erga
24. Juli 2011 um 19:26
1
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
erga
24. Juli 2011 um 21:29
3
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
wgreipl
30. Dezember 2011 um 10:23
5
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;
}
?>
meike0_0:
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
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
RWN
25. September 2012 um 16:27
8
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
RWN
25. September 2012 um 17:05
10
Das ist eine Funktion, wo die steht, ist egal. Als Eingangsvariable, wird ein Integer benötigt.
wgreipl
25. September 2012 um 17:09
11
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
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);
}
?>
RWN
25. September 2012 um 19:33
13
@Werner ,
wie der Name der Funktion schon sagt.
<?
$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
wgreipl
25. September 2012 um 19:43
14
Bemerkte ich auch erst später :rolleyes:
0x… ist das Zaubermittel.
Habe es auch gleich wieder gelöscht