[ASP] kleurcodes berekenen

Pagina: 1
Acties:
  • 249 views sinds 30-01-2008
  • Reageer

  • licensed
  • Registratie: Augustus 2002
  • Laatst online: 24-01 20:57
Jongens, ik zit met een probleempje.

Ik probeer is ASP een script te schrijven dat gegeven een hexadecimale (RGB) kleurcode de kleurcode kan berekenen van de kleur die x% lichter/donkerder is.

Ik heb geprobeerd de hexadecimale waarde van R, G en B om te zetten naar decimale waarden en deze vervolgens x% te verhogen/verlagen en de decimale waarde die is verkregen weer om te zetten naar een haxadecimale kleurcode, maar dit blijkt alleen voor grijstinten te werken.

Kent er iemand een algoritme dat ik hiervoor kan gebruiken??

  • Banpei
  • Registratie: Juli 2001
  • Laatst online: 14:28
Misschien een gemiddelde van de drie nemen en dat aanhouden als percentage? :?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12:28

Janoz

Moderator Devschuur®

!litemod

Omzetten van RGB naar HSV en vervolgens V x% verhogen. Terugzetten naar RGB en je zit redelijk dicht in de buurt.

[ Voor 3% gewijzigd door Janoz op 30-01-2003 11:57 . Reden: Oeps.. Na het zien van onderstaande voorbeeldcode blijkt het toch V te zijn die moet worden verhoogd. ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • licensed
  • Registratie: Augustus 2002
  • Laatst online: 24-01 20:57
Janoz schreef op 30 januari 2003 @ 11:24:
Omzetten van RGB naar HSV en vervolgens H x% verhogen. Terugzetten naar RGB en je zit redelijk dicht in de buurt.
Hoe kan ik RGB het beste omzetten naar HSV en vice versa?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12:28

Janoz

Moderator Devschuur®

!litemod

google.com al geprobeert?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Function makeDarker(color) 
    Dim resetbang
    resetbang = false
    If (Left(color, 1) = "#") Then
        resetbang = true
        color = Right(color, len(color) - 1)    
    End If
    Dim intcolor, red, gre, blu
    intcolor = hextoint(color)
    red = int(&h000000FF AND int(intcolor / &h010000))
    gre = int(&h000000FF AND int(intcolor / &h000100))
    blu = int((&h000000FF AND int(intcolor)))
    red = int(red / 1.1)
    gre = int(gre / 1.1)
    blu = int(blu / 1.1)    
    color = HEX((red * &h010000) OR (gre * &h000100)  OR blu)
    color = String(6-Len(color), "0") & color
    If (resetbang) Then
        color = "#" & color
    End If
    makeDarker = color
End Function

Function hextoint(hexstr) 
    hexstr = Ucase(hexstr)
    Dim i, int 
    Dim length 
    int = 0
    length = Len(hexstr) 
    For i = length to 1 step -1
        Dim hex
        hex = Mid(hexstr, i, 1)
        Select Case hex
        Case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"
            int = int + Cint(hex) * (16 ^ (length - i))
        Case "A", "B", "C", "D", "E", "F"
            int = int + (ASC(hex)-55) * (16 ^ (length - i))
        Case Else
            int = int + 0
        End Select
    Next
    hextoint = int
End Function


Edit: sorry dat ik alleen maar wat code neer flans... heb niet zoveel tijd... Ik had dit nog ergens liggen .. ik geloof dat het wel werkt ... maar heb het al in tijden niet meer gebruikt.. Denk dat het netter is die 1.1 mee te geven aan de functie zodat je ook de "sterkte" van de verdonkering mee kan geven

Oeps sorry zie dat je precies al hebt geprobeerd wat deze code doet..... dus waarschijnlijk heb je hier niets aan

[ Voor 46% gewijzigd door Verwijderd op 30-01-2003 11:52 ]


  • licensed
  • Registratie: Augustus 2002
  • Laatst online: 24-01 20:57
Janoz schreef op 30 januari 2003 @ 11:36:
google.com al geprobeert?
Ja, ik heb er o.a. dit gevonden:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
// r,g,b values are from 0 to 1
// h = [0,360], s = [0,1], v = [0,1]
//      if s == 0, then h = -1 (undefined)
void RGBtoHSV( float r, float g, float b, float *h, float *s, float *v )
{
    float min, max, delta;
    min = MIN( r, g, b );
    max = MAX( r, g, b );
    *v = max;               // v
    delta = max - min;
    if( max != 0 )
        *s = delta / max;       // s
    else {
        // r = g = b = 0        // s = 0, v is undefined
        *s = 0;
        *h = -1;
        return;
    }
    if( r == max )
        *h = ( g - b ) / delta;     // between yellow & magenta
    else if( g == max )
        *h = 2 + ( b - r ) / delta; // between cyan & yellow
    else
        *h = 4 + ( r - g ) / delta; // between magenta & cyan
    *h *= 60;               // degrees
    if( *h < 0 )
        *h += 360;
}
void HSVtoRGB( float *r, float *g, float *b, float h, float s, float v )
{
    int i;
    float f, p, q, t;
    if( s == 0 ) {
        // achromatic (grey)
        *r = *g = *b = v;
        return;
    }
    h /= 60;            // sector 0 to 5
    i = floor( h );
    f = h - i;          // factorial part of h
    p = v * ( 1 - s );
    q = v * ( 1 - s * f );
    t = v * ( 1 - s * ( 1 - f ) );
    switch( i ) {
        case 0:
            *r = v;
            *g = t;
            *b = p;
            break;
        case 1:
            *r = q;
            *g = v;
            *b = p;
            break;
        case 2
            *r = p;
            *g = v;
            *b = t;
            break;
        case 3:
            *r = p;
            *g = q;
            *b = v;
            break;
        case 4:
            *r = t;
            *g = p;
            *b = v;
            break;
        default:        // case 5:
            *r = v;
            *g = p;
            *b = q;
            break;
    }
}


Dit stuk code snap ik alleen niet helemaal.

Java:
1
]// r,g,b values are from 0 to 1
:?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12:28

Janoz

Moderator Devschuur®

!litemod

Dat is engels voor "De rood groen en blauw component loopt van 0 tot 1"

Het zijn zoals je kunt zien ook floats. Ipv geschaald tussen 0 en 255 is het nu tussen 0 en 1.

BTW, dit is geen java, maar C. Daarnaast heb je in java gewoon een methode in Color die de boel om kan zetten.

Let trouwens ff op.. Ik had een foutje gemaakt in mijn eerdere bericht.

[ Voor 38% gewijzigd door Janoz op 30-01-2003 11:58 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Janoz schreef op 30 januari 2003 @ 11:55:
Dat is engels voor "De rood groen en blauw component loopt van 0 tot 1"

Het zijn zoals je kunt zien ook floats. Ipv geschaald tussen 0 en 255 is het nu tussen 0 en 1.

BTW, dit is geen java, maar C. Daarnaast heb je in java gewoon een methode in Color die de boel om kan zetten.
Dus moet je gewoon even elke r, g en b waarde met 1/255 vermenigvuldigen om in die schaal te belanden.

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 13:16
Ik ben deze code ook eens tegengekomen en kwam er toen achter dat hij volgens mij niet helemaal klopt: in regel 9 wordt de V gelijk gezet aan de max van de kleurcomponenten; ik kan me niet voorstellen dat dat voldoende is...

  • licensed
  • Registratie: Augustus 2002
  • Laatst online: 24-01 20:57
Janoz schreef op 30 januari 2003 @ 11:55:
BTW, dit is geen java, maar C. Daarnaast heb je in java gewoon een methode in Color die de boel om kan zetten.
Heb je ook een idee hoe ik dit in ASP voor elkaar krijg?

[ Voor 33% gewijzigd door licensed op 30-01-2003 12:15 ]


Verwijderd

licensed schreef op 30 januari 2003 @ 12:05:
[...]

Heb je ook een idee hoe ik dit in ASP voor elkaar krijg?
"Dit" wat :? Delen door 255?

  • licensed
  • Registratie: Augustus 2002
  • Laatst online: 24-01 20:57

Sjoorda heeft ICQ.

[ Voor 235% gewijzigd door Janoz op 30-01-2003 13:13 ]


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12:28

Janoz

Moderator Devschuur®

!litemod

Dat algoritme is IMHO wel redelijk te porten naar een andere taal. Ik zie het probleem niet helemaal. Zeker niet voor iemand die Inf aan de RuG studeert eigenlijk..

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • licensed
  • Registratie: Augustus 2002
  • Laatst online: 24-01 20:57
Janoz schreef op 30 January 2003 @ 13:10:
Dat algoritme is IMHO wel redelijk te porten naar een andere taal. Ik zie het probleem niet helemaal. Zeker niet voor iemand die Inf aan de RuG studeert eigenlijk..
Want dat doe jij ook....

Ik ga d'r mee aan de gang.
Pagina: 1