public Color2 ConvertToRgb(Info info) { int r, g, b; r = (byte)Common.Clamp(info.a + 128, 0, 255); g = (byte)Common.Clamp(info.b + 128, 0, 255); b = (byte)Common.Clamp(info.c + 128, 0, 255); return new Color2() { a = 255, r = (byte)r, g = (byte)g, b = (byte)b }; }
public Color2 ConvertToRgb(Info info) { byte r, g, b; float y = info.a + 128; float cb = info.b; float cr = info.c; r = (byte)Common.Clamp(y + cr * mYcbcrRgb[0, 2], 0, 255); g = (byte)Common.Clamp(y + cb * mYcbcrRgb[1, 1] + cr * mYcbcrRgb[1, 2], 0, 255); b = (byte)Common.Clamp(y + cb * mYcbcrRgb[2, 1] , 0, 255); return new Color2() { a = 255, r = r, g = g, b = b }; }
internal Info LabToXyz(Info lab) { Info xyz; float fy = (((lab.a + 128f) / 2.55f) + 16f) / 116f; float fx = lab.b / 500f + fy; float fz = fy - lab.c / 200f; xyz.a = CreoQueSeQueHace(fx) * D65.x; xyz.b = CreoQueSeQueHace(fy) * D65.y; xyz.c = CreoQueSeQueHace(fz) * D65.z; return xyz; }
internal Info XyzToLab(Info xyz, bool clamp = false) { Info lab; // Usando D65 float fx = NoSeQueHace(xyz.a / D65.x); float fy = NoSeQueHace(xyz.b / D65.y); float fz = NoSeQueHace(xyz.c / D65.z); lab.a = (116f * fy - 16f) * 2.55f - 128f; lab.b = 500f * (fx - fy); lab.c = 200f * (fy - fz); if (clamp) { lab.a = Common.Clamp(lab.a, -128f, 127f); lab.b = Common.Clamp(lab.b, -128f, 127f); lab.c = Common.Clamp(lab.c, -128f, 127f); } return lab; }
public Color2 ConvertToRgb(Info info) { info = LabToXyz(info); return XyzToRgb(info); }
internal Color2 XyzToRgb(Info xyz) { float r, g, b; int ir, ig, ib; r = xyz.a * mXyzsRgb[0, 0] + xyz.b * mXyzsRgb[0, 1] + xyz.c * mXyzsRgb[0, 2]; g = xyz.a * mXyzsRgb[1, 0] + xyz.b * mXyzsRgb[1, 1] + xyz.c * mXyzsRgb[1, 2]; b = xyz.a * mXyzsRgb[2, 0] + xyz.b * mXyzsRgb[2, 1] + xyz.c * mXyzsRgb[2, 2]; ir = GetRgbColor(r); ig = GetRgbColor(g); ib = GetRgbColor(b); return new Color2() { a = 255, r = (byte)ir, g = (byte)ig, b = (byte)ib }; }
public Info ConvertFromRgb(Color2 rgb) { Info info = RgbToXyz(rgb); return(XyzToLab(info)); }
public Color2 ConvertToRgb(Info info) { info = LabToXyz(info); return(XyzToRgb(info)); }