/// <summary> /// Creates Images of an optical illusion that tricks the mind into /// seeing more different colors (4) than are actually present in the /// image (3). /// </summary> public static PixImage <byte> CreateHowManyColorsIllusion(int size, bool parallel = true) { var scale = 1024.0 / size; var delta = 0.5 * (double)(size - 1); var pixImage = new PixImage <byte>(size, size, 3); var colorMatrix = pixImage.GetMatrix <C3b>(); var orange = new C3b(255, 150, 0); var magenta = new C3b(255, 0, 255); var bluegreen = new C3b(0, 255, 150); Func <long, long, C3b> pixelFun = (x, y) => { var xd = scale * (x - delta); var yd = scale * (y - delta); var r = Fun.Sqrt(xd * xd + yd * yd); var phi = Fun.Atan2(yd, xd); var lp1 = phi / Constant.PiTimesFour; var lp2 = phi / Constant.Pi; // TimesTwo; var lr = Fun.Log(r) / Constant.E; var p1 = Fun.Frac(0.05 + 4 * (lr - lp1)); var p2 = Fun.Frac(96 * (lr + lp2)); // 64 return(p2 < 0.5 ? (p1 >= 0.0 && p1 < 0.25 ? bluegreen : orange) : (p1 >= 0.5 && p1 < 0.75 ? bluegreen : magenta)); }; if (parallel) { colorMatrix.SetByCoordParallelY(pixelFun); } else { colorMatrix.SetByCoord(pixelFun); } return(pixImage); }
public static System.Drawing.Color ToColor(this C3b color) { return(System.Drawing.Color.FromArgb( color.R, color.G, color.B)); }
/// <summary>Computes MD5 hash of given data.</summary> public static Guid ComputeMd5Hash(this C3b x) => ComputeMd5Hash(bw => { bw.Write(x.R); bw.Write(x.G); bw.Write(x.B); });
public void Write(C3b c) { Write(c.R); Write(c.G); Write(c.B); }
/// <summary> /// C3b to System.Drawing.Color. /// </summary> public static Color ToColor(this C3b color) => Color.FromArgb(color.R, color.G, color.B);