public static void DrawPixel(ref MaskData data, int x, int y, bool setTo) { if (setTo) { data = data.LazyCopyExpandToContain(new Rectangle(x, y, 1, 1)); } if (data.Bounds.Contains(x, y)) { data[x, y] = setTo; } }
public static void DrawLine(ref MaskData data, int x1, int y1, int x2, int y2, bool setTo) { data = data.LazyCopyExpandToContain(Rectangle.Union(new Rectangle(x1, y1, 1, 1), new Rectangle(x2, y2, 1, 1))); int x = x1; int y = y1; int dx = x2 - x1; int dy = y2 - y1; int x_inc = (dx < 0) ? -1 : 1; int l = System.Math.Abs(dx); int y_inc = (dy < 0) ? -1 : 1; int m = System.Math.Abs(dy); int dx2 = l << 1; int dy2 = m << 1; if ((l >= m)) { int err_1 = dy2 - l; for (int i = 0; i < l; i++) { data[x, y] = setTo; if (err_1 > 0) { y += y_inc; err_1 -= dx2; } err_1 += dy2; x += x_inc; } } else { int err_1 = dx2 - m; for (int i = 0; i < m; i++) { data[x, y] = setTo; if (err_1 > 0) { x += x_inc; err_1 -= dy2; } err_1 += dx2; y += y_inc; } } data[x, y] = setTo; }