/// <summary> /// Set the border of a matrix to a specific value. /// </summary> public static void SetBorder <T>(this Matrix <T> matrix, Border2l border, T value) { matrix.ApplyCenterBordersAndCorners(border, m => { }, m => m.Set(value), m => m.Set(value), m => m.Set(value), m => m.Set(value), m => m.Set(value), m => m.Set(value), m => m.Set(value), m => m.Set(value)); }
/// <summary> /// Replicate the border pixels of the center region outward. /// </summary> public static void ReplicateBorder <T>(this Matrix <T> matrix, Border2l border) { matrix.ApplyCenterBordersAndCorners(new Border2l(border.Min, border.Max), m => { }, m => m.SetByCoord(y => m[m.EX, y], (y, x, vy) => vy), m => m.SetByCoord(y => m[m.FX - 1, y], (y, x, vy) => vy), m => { var tm = m.SubMatrixWindow(m.F, m.S.YX, m.D.YX, m.F.YX); tm.SetByCoord(y => tm[tm.EX, y], (y, x, vy) => vy); }, m => { var tm = m.SubMatrixWindow(m.F, m.S.YX, m.D.YX, m.F.YX); tm.SetByCoord(y => tm[tm.FX - 1, y], (y, x, vy) => vy); }, m => { var v = m[m.EX, m.EY]; m.SetByCoord((x, y) => v); }, m => { var v = m[m.FX - 1, m.EY]; m.SetByCoord((x, y) => v); }, m => { var v = m[m.EX, m.FY - 1]; m.SetByCoord((x, y) => v); }, m => { var v = m[m.FX - 1, m.FY - 1]; m.SetByCoord((x, y) => v); }); }