May be better use that?
Without checking "Bypass sRGB Sampling" in texture.
In UIBasicSprite:
Color32 drawingColor
{
get
{
Color colF = color;
colF.a = finalAlpha;
if (premultipliedAlpha) colF = NGUITools.ApplyPMA(colF);
if (QualitySettings.activeColorSpace == ColorSpace.Linear)
{
colF.r = Mathf.GammaToLinearSpace(colF.r);
colF.g = Mathf.GammaToLinearSpace(colF.g);
colF.b = Mathf.GammaToLinearSpace(colF.b);
}
return colF;
}
}
It used variable power. For example, values from tests:
RGBA(0.216, 0.216, 0.216, 1.000) => RGBA(0.038, 0.038, 0.038, 1.000) PowerRGB(2.128869, 2.128869, 2.128869)
RGBA(0.235, 0.843, 0.784, 1.000) => RGBA(0.045, 0.680, 0.578, 1.000) PowerRGB(2.140385, 2.26423, 2.259379)
RGBA(0.902, 0.255, 0.235, 1.000) => RGBA(0.791, 0.053, 0.045, 1.000) PowerRGB(2.268569, 2.15096, 2.140385)
RGBA(0.051, 0.157, 0.180, 1.000) => RGBA(0.004, 0.021, 0.027, 1.000) PowerRGB(1.853064, 2.079946, 2.1021)
where PowerRGB from condition: correctedColor.r = Mathf.Pow(originalColor.r, PowerRGB.r); //same for g, b
Mathf.GammaToLinearSpace() graphics