Avatar billede loevgaard Praktikant
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 :)
Avatar billede olebole Juniormester
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>
Avatar billede loevgaard Praktikant
16. januar 2005 - 21:39 #2
Hvordan giver jeg point?
Avatar billede olebole Juniormester
18. januar 2005 - 00:55 #3
Ooops ... den e-mail har jeg da ikke fået. Nu kan du uddele points  :)
Avatar billede loevgaard Praktikant
18. januar 2005 - 11:59 #4
Du får pointene når jeg har testet om det virker olebole, tak for hjælpen indtil videre :)
Avatar billede olebole Juniormester
18. januar 2005 - 16:05 #5
Helt fint med mig  ;o)
Avatar billede loevgaard Praktikant
21. januar 2005 - 23:31 #6
Det virkede, så der fik du dine point, mange tak for hjælpen :)
Avatar billede olebole Juniormester
21. januar 2005 - 23:37 #7
... anytime  ;o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester