我需要绘制一个带有Graphics
类(只是交叉线)的网格,以及一个像这张图片的透明表示:
除了绘制每一条线/矩形之外,我不知道任何其他方式。如果场很宽,表现很差。有没有更好的方法来绘制这些东西?
这是我当前绘制网格的代码:
private void drawGrid(Graphics pGraphic, int pGridSize)
{
int verticalCount = this.mPicScreen.Width / pGridSize + 1;
int horizontalCount = this.mPicScreen.Height / pGridSize + 1;
Pen p = new Pen(Color.Gray);
// Vertical Lines
for (int i = 0; i < verticalCount; i++)
{
pGraphic.DrawLine(p,
new Point(i * pGridSize, 0),
new Point(i * pGridSize, this.mPicScreen.Height));
}
// Horizontal Lines
for (int i = 0; i < horizontalCount; i++)
{
pGraphic.DrawLine(p,
new Point(0, i * pGridSize),
new Point(this.mPicScreen.Width, i * pGridSize));
}
}
答案 0 :(得分:3)
有一种更好的方法:只需使用画笔
如果您需要创建用户定义的网格大小,可以使用
System.Drawing.TextureBrush
如果随机的一个没问题,你可以在
中找到System.Drawing.Drawing2D.HatchBrush
已经是网格样式
答案 1 :(得分:0)
控件实际上是在绘制过程中闪烁(因为控件有意无意地失效)。这不是性能问题,但实际上因为控件不是DoubleBuffered
。
以下是在DoubleBuffered
上启用Controls
的代码:
public static void setDoubleBuffered(System.Windows.Forms.Control c)
{
if (System.Windows.Forms.SystemInformation.TerminalServerSession)
return;
System.Reflection.PropertyInfo aProp =
typeof(System.Windows.Forms.Control).GetProperty(
"DoubleBuffered",
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Instance);
aProp.SetValue(c, true, null);
}