12. januar 2005 - 16:43
Der er
6 kommentarer og
1 løsning
Fra PHP til VB
Jeg har følgende kode i PHP:
<?PHP
function hsb2rgb($hue, $saturation, $brightness) {
/* 0: minimum, +: rising, -: falling, 1: maximum. */
$map = array(0 => array('1', '+', '0'),
1 => array('-', '1', '0'),
2 => array('0', '1', '+'),
3 => array('0', '-', '1'),
4 => array('+', '0', '1'),
5 => array('1', '0', '-'));
/* Clip hue at 360: */
$hue = $hue % 360;
$i = floor($hue/60);
$rgb = array();
$min = 255 * $brightness/100 * (100-$saturation)/100;
$max = 255 * $brightness/100;
for ($color = 0; $color < 3; $color++) {
switch($map[$i][$color]) {
case '0':
$rgb[$color] = $min;
break;
case '1':
$rgb[$color] = $max;
break;
case '+':
$rgb[$color] = $min + ($hue % 60)/60 * ($max - $min);
break;
case '-':
$rgb[$color] = $max - ($hue % 60)/60 * ($max - $min);
break;
}
}
return $rgb;
}
?>
og den vil jeg gerne have omformuleret til VB eller hvis nogen allerede har nogle scripts eller lignende ang. hsb-værdier kontra rgb-værdier, så må I også meget gerne smide nogle links til dem :)
15. januar 2005 - 02:49
#1
<ole>
Du kan prøve dette i en form:
Option Explicit
Private rgb(3) As Variant
Private Sub hsb2rgb(hue As Integer, saturation As Integer, brightness As Integer)
Dim map(6) As Variant
Dim I As Integer
Dim min As Integer
Dim max As Integer
Dim color As Integer
map(0) = Array("1", "+", "0")
map(1) = Array("-", "1", "0")
map(2) = Array("0", "1", "+")
map(3) = Array("0", "-", "1")
map(4) = Array("+", "0", "1")
map(5) = Array("1", "0", "-")
hue = hue Mod 360
I = Int(hue / 60)
min = 255 * brightness / 100 * (100 - saturation) / 100
max = 255 * brightness / 100
For color = 0 To 2
Select Case map(I)(color)
Case "0":
rgb(color) = min
Case "1":
rgb(color) = max
Case "+":
rgb(color) = min + (hue Mod 60) / 60 * (max - min)
Case "-":
rgb(color) = max - (hue Mod 60) / 60 * (max - min)
End Select
Next color
End Sub
Private Sub Form_Load()
hsb2rgb 191, 100, 73
MsgBox "R:" & rgb(0) & vbCrLf & "G:" & rgb(1) & vbCrLf & "B:" & rgb(2)
End Sub
/mvh
</bole>