C#: Create a lighter/darker color based on a system color

前端 未结 11 1444
春和景丽
春和景丽 2020-12-07 18:26

Duplicate

How do I adjust the brightness of a color?
How do I determine darker or lighter color variant of a given color?
Programmat

11条回答
  •  夕颜
    夕颜 (楼主)
    2020-12-07 19:01

    Here's some javascript code I use for lightening/darkening a given colour. You could use it as a base for an equivalent C# function

    It works by calculating a distance from pure white of each of the RGB components and then adjusts this distance by the provided factor. The new distance is used to calculate the new colour. A factor of between 0 and 1 darkens, a factor higher than 1 lightens

    function Darken( hexColor, factor )
        {   
            if ( factor < 0 ) factor = 0;
    
            var c = hexColor;
            if ( c.substr(0,1) == "#" )
            {
                c = c.substring(1);
            }
    
            if ( c.length == 3 || c.length == 6 )
            {
                var i = c.length / 3;
    
                var f;  // the relative distance from white
    
                var r = parseInt( c.substr(0, i ), 16 );
                f = ( factor * r / (256-r) );
                r = Math.floor((256 * f) / (f+1));
    
                r = r.toString(16);
                if ( r.length == 1 ) r = "0" + r;
    
                var g = parseInt( c.substr(i, i), 16);
                f = ( factor * g / (256-g) );
                g = Math.floor((256 * f) / (f+1));
                g = g.toString(16);
                if ( g.length == 1 ) g = "0" + g;
    
                var b = parseInt( c.substr( 2*i, i),16 );
                f = ( factor * b / (256-b) );
                b = Math.floor((256 * f) / (f+1));
                b = b.toString(16);
                if ( b.length == 1 ) b = "0" + b;
    
                c =  r+g+b;
             }   
    
             return "#" + c;
    
        }
    

提交回复
热议问题