using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Tango.MachineStudio.RML.Models { public class BatchConversionCsvModelOut { public string Index { get; set; } public double L { get; set; } public double A { get; set; } public double B { get; set; } public double SuggestionL { get; set; } public double SuggestionA { get; set; } public double SuggestionB { get; set; } public double SuggestionDeltaE { get; set; } public double OutputL { get; set; } public double OutputA { get; set; } public double OutputB { get; set; } public double OutputDeltaE { get; set; } public double Cyan { get; set; } public double Magenta { get; set; } public double Yellow { get; set; } public double Black { get; set; } public double LightCyan { get; set; } public double LightMagenta { get; set; } public double LightYellow { get; set; } public bool OutOfGamut { get; set; } public static double MirtaDeltaE(double L1, double a1, double b1, double L2, double a2, double b2) { double h1 = Math.Atan2(b1, a1) * (180 / Math.PI); if (h1 < 0) h1 = h1 + 360; double h2 = Math.Atan2(b2, a2) * (180 / Math.PI); if (h2 < 0) h2 = h2 + 360; double refX_H = h1; //chroma calculation double refX_C = Math.Sqrt(a1 * a1 + b1 * b1); //reference SL parameter double refX_SL; if (L1 <= 16) refX_SL = 0.511; else refX_SL = L1 * 0.040975 / (1 + 0.01765 * L1); //reference SC parameter double refX_SC = (0.638 + 0.0638 * refX_C / (1 + 0.0131 * refX_C)); //reference CQ parameter double refX_CQ = Math.Pow(refX_C, 4); //reference F parameter double refX_F = Math.Sqrt(refX_CQ / (refX_CQ + 1900)); // reference T parameter double refX_T = 0; if ((refX_H > 164) & (refX_H < 345)) refX_T = 0.56 + Math.Abs(0.2 * Math.Cos(Math.PI * (refX_H + 168) / 180)); else if ((refX_H >= 345) | (refX_H <= 164)) refX_T = 0.36 + Math.Abs(0.4 * Math.Cos(Math.PI * (refX_H + 35) / 180)); // reference SH parameter double refX_SH = refX_SC * (refX_T * refX_F + 1 - refX_F); //sample parameter calculations //hue calculation double samX_H = h2; //chroma calculation double samX_C = Math.Sqrt(a2 * a2 + b2 * b2); double dL = L1 - L2; double dC = samX_C - refX_C; double da = a1 - a2; double db = b1 - b2; double dH = Math.Sqrt(Math.Max(da * da + db * db - dC * dC, 0.0)); double dECMC = Math.Sqrt(Math.Pow(dL / (2 * refX_SL), 2) + Math.Pow(dC / refX_SC, 2) + Math.Pow(dH / refX_SH, 2)); return dECMC; } } }