FromArgb vs FromScRgb

前端 未结 4 1996
花落未央
花落未央 2020-12-20 07:43

Should these two expressions result in colors which are roughly the same?

Color.FromArgb(255, 255, 255, (byte)0.25 * 255))

Color.FromScRgb(1.0f, 1.0f, 1.0f,         


        
4条回答
  •  天命终不由人
    2020-12-20 08:24

    Try to use ColorFloatToByte method to have your desired results:

    private static byte ColorFloatToByte(float val)
    {
        if (!(val > 0.0)) // Handles NaN case too
            return (0);
        else if (val <= 0.0031308)
            return ((byte)((255.0f * val * 12.92f) + 0.5f));
        else if (val < 1.0)
            return ((byte)((255.0f * ((1.055f * 
                   (float)Math.Pow((double)val, (1.0 / 2.4))) - 0.055f)) + 0.5f));
        else
            return (255);
    }
    

    Usage:

    Color.FromArgb(255, 255, 255, ColorFloatToByte(0.25f)))
    
    Color.FromScRgb(1.0f, 1.0f, 1.0f, 0.25f))
    

提交回复
热议问题