private static Bitmap GrayDiff(Bitmap b1, Bitmap b2) { var res = new Bitmap(b1.Width, b1.Height); using (var fb1 = new FastBitmap(b1)) using (var fb2 = new FastBitmap(b2)) using (var fb3 = new FastBitmap(res)) { for (var i = 0; i < fb1.Count; i++) { var diff = (byte)Math.Abs(fb1.GetI(i).r - fb2.GetI(i).r); fb3.SetI(i, (diff, diff, diff)); } } var(min, max) = ((byte)255, (byte)0); FastBitmap.ForEach(res, cl => { if (cl.r > max) { max = cl.r; } if (cl.r < min) { min = cl.r; } }); return(FastBitmap.Select(res, cl => { var t = (byte)((cl.r - min) / (double)(max - min) * 255); return (t, t, t); }));; }