如何使绘制矩形每边比记录的矩形大 2px。 C#
How to make a draw rectangle 2px larger on each side than the recorded rectangle. C#
嘿,所以我目前正在使用此 post 在 canvas 上创建矩形,并且正在徘徊如何使绘制的矩形比记录的实际矩形大 2px。这可能吗?如果可以,我该怎么做?我已经尝试了一段时间,现在对于最终找到解决方案真的很有用。
Point startPos; // mouse-down position
Point currentPos; // current mouse position
bool drawing; // busy drawing
List<Rectangle> rectangles = new List<Rectangle>(); // previous rectangles
private Rectangle getRectangle() {
return new Rectangle(
Math.Min(startPos.X, currentPos.X),
Math.Min(startPos.Y, currentPos.Y),
Math.Abs(startPos.X - currentPos.X),
Math.Abs(startPos.Y - currentPos.Y));
}
private void canevas_MouseDown(object sender, MouseEventArgs e) {
currentPos = startPos = e.Location;
drawing = true;
}
private void canevas_MouseMove(object sender, MouseEventArgs e) {
currentPos = e.Location;
if (drawing) canevas.Invalidate();
}
private void canevas_MouseUp(object sender, MouseEventArgs e) {
if (drawing) {
drawing = false;
var rc = getRectangle();
if (rc.Width > 0 && rc.Height > 0) rectangles.Add(rc);
canevas.Invalidate();
}
}
private void canevas_Paint(object sender, PaintEventArgs e) {
if (rectangles.Count > 0) e.Graphics.DrawRectangles(Pens.Black, rectangles.ToArray());
if (drawing) e.Graphics.DrawRectangle(Pens.Red, getRectangle());
}
仅供参考此代码来自此post
在 getRectangle
方法中,您只需更改在 Rectangle
的构造函数中使用的值。由于第三个指的是宽度 属性,因此您将像素数添加到 Math.Abs(startPos.X - currentPos.X)
。此后,检查 if (rc.Width > 0)
毫无用处,原因很明显。
嘿,所以我目前正在使用此 post 在 canvas 上创建矩形,并且正在徘徊如何使绘制的矩形比记录的实际矩形大 2px。这可能吗?如果可以,我该怎么做?我已经尝试了一段时间,现在对于最终找到解决方案真的很有用。
Point startPos; // mouse-down position
Point currentPos; // current mouse position
bool drawing; // busy drawing
List<Rectangle> rectangles = new List<Rectangle>(); // previous rectangles
private Rectangle getRectangle() {
return new Rectangle(
Math.Min(startPos.X, currentPos.X),
Math.Min(startPos.Y, currentPos.Y),
Math.Abs(startPos.X - currentPos.X),
Math.Abs(startPos.Y - currentPos.Y));
}
private void canevas_MouseDown(object sender, MouseEventArgs e) {
currentPos = startPos = e.Location;
drawing = true;
}
private void canevas_MouseMove(object sender, MouseEventArgs e) {
currentPos = e.Location;
if (drawing) canevas.Invalidate();
}
private void canevas_MouseUp(object sender, MouseEventArgs e) {
if (drawing) {
drawing = false;
var rc = getRectangle();
if (rc.Width > 0 && rc.Height > 0) rectangles.Add(rc);
canevas.Invalidate();
}
}
private void canevas_Paint(object sender, PaintEventArgs e) {
if (rectangles.Count > 0) e.Graphics.DrawRectangles(Pens.Black, rectangles.ToArray());
if (drawing) e.Graphics.DrawRectangle(Pens.Red, getRectangle());
}
仅供参考此代码来自此post
在 getRectangle
方法中,您只需更改在 Rectangle
的构造函数中使用的值。由于第三个指的是宽度 属性,因此您将像素数添加到 Math.Abs(startPos.X - currentPos.X)
。此后,检查 if (rc.Width > 0)
毫无用处,原因很明显。