static public double Distance(LabColor x, LabColor y) { switch (_COLORSPACE) { case Colorspace.CIE2000: return(CIE2000.ComputeDifference(x, y)); case Colorspace.CIE1994: return(CIE1994.ComputeDifference(x, y)); case Colorspace.CIE1976: return(CIE1976.ComputeDifference(x, y)); default: return(CIE1976.ComputeDifference(x, y)); } }
private bool Compare(Bitmap bitmap, int x, int y, Color color) { var difference = new CIE76ColorDifference(); var converter = new ColourfulConverter() { WhitePoint = Illuminants.D65 }; var rgbColor = bitmap.GetPixel(bitmap.Width - x, bitmap.Height - y); var labColor = converter.ToLab(new RGBColor(rgbColor)); var cmpColor = converter.ToLab(new RGBColor(color)); var diff = difference.ComputeDifference(labColor, cmpColor); return(Math.Abs(diff) < ColorDiffThreashold); }
private PowDebuff[] GetPowDebuffs(Bitmap bitmap) { // 右下のアイコンは透過が少しあるため、ピクセル単位の色が完全一致しない。 // そのため、L*a*b色空間での色差が閾値以内かどうかで判定する。 var converter = new ColourfulConverter() { WhitePoint = Illuminants.D65 }; var powerBreakCmpLabColor1 = converter.ToLab(PowerBreakCmpColor1); var powerBreakCmpLabColor2 = converter.ToLab(PowerBreakCmpColor2); var difference = new CIE76ColorDifference(); for (int i = 0; i < MaxPowerDebuffCount; i++) { var x1 = bitmap.Width - 28 - (32 * i); var x2 = bitmap.Width - 34 - (32 * i); var y = bitmap.Height - 20; var c1 = converter.ToLab(new RGBColor(bitmap.GetPixel(x1, y))); var c2 = converter.ToLab(new RGBColor(bitmap.GetPixel(x2, y))); var diff1 = difference.ComputeDifference(powerBreakCmpLabColor1, c1); var diff2 = difference.ComputeDifference(powerBreakCmpLabColor2, c2); if (Math.Abs(diff1) < ColorDiffThreashold && Math.Abs(diff2) < ColorDiffThreashold) { return(new PowDebuff[] { PowerBreak }); } } return(new PowDebuff[0]); }
private bool IsSameColorContains(uint[] colors, uint c) { var difference = new CIE76ColorDifference(); var converter = new ColourfulConverter() { WhitePoint = Illuminants.D65 }; var labColor = converter.ToLab(new RGBColor(Color.FromArgb((int)c))); foreach (var color in colors) { var l = converter.ToLab(new RGBColor(Color.FromArgb((int)color))); var diff = difference.ComputeDifference(labColor, l); if (Math.Abs(diff) < ColorDiffThreashold) { return(true); } } return(false); }
public double Distance(Color c1, Color c2) { return(Ciede76.ComputeDifference(Converter.ToLab(new RGBColor(c1)), Converter.ToLab(new RGBColor(c2)))); }