110,499
社区成员
发帖
与我相关
我的任务
分享
private void panel2_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
Bitmap bmp = new Bitmap(panel2.ClientRectangle.Width, panel2.ClientRectangle.Height);//创建位图
Graphics BufPicture = Graphics.FromImage(bmp);//位图的图形对象
System.Drawing.Drawing2D.GraphicsPath gp = new System.Drawing.Drawing2D.GraphicsPath();
e.Graphics.FillRectangle(Brushes.White, e.Graphics.ClipBounds);
Point Positionpanel2 = panel2.Location;
Point Positiongroupbox4 = groupBox4.Location;
int panel2PX = Positionpanel2.X;//容器panel的X坐标
int panel2PY = Positionpanel2.Y;//容器panel的Y坐标
int groupbox4PX = Positiongroupbox4.X;//分组框的X坐标
int groupbox4PY = Positiongroupbox4.Y;
for (int i = 0; i < panel2.ClientRectangle.Width / unit_drawing + 1; i++)//画出X轴
{
BufPicture.DrawLine(GridPen, panel2PX + groupbox4PX + i * unit_drawing, panel2PY + groupbox4PY, panel2PX + groupbox4PX + i * unit_drawing, panel2PY + groupbox4PY + (panel2.ClientRectangle.Height / unit_drawing) * unit_drawing);//画出X轴线
if (i % 3 == 0)
{ gp.AddString((i * unit_drawing).ToString(), this.Font.FontFamily, (int)FontStyle.Regular, 12, new RectangleF(panel2PX + groupbox4PX + i * unit_drawing, panel2PY + groupbox4PY + panel2.ClientRectangle.Height + 5, 400, 50), null); }//加上X轴坐标值
}
for (int i = 0; i < panel2.ClientRectangle.Height / unit_drawing + 1; i++)//画出Y轴
{
BufPicture.DrawLine(GridPen, panel2PX + groupbox4PX, panel2PY + groupbox4PY + i * unit_drawing, panel2PX + groupbox4PX + (panel2.ClientRectangle.Width / unit_drawing) * unit_drawing, panel2PY + groupbox4PY + i * unit_drawing);//画线
if (i % 4 == 0)
gp.AddString((i * 0.25).ToString(), this.Font.FontFamily, (int)FontStyle.Regular, 12, new RectangleF((panel2PX + groupbox4PX) / 2, -i * unit_drawing + panel2PY + groupbox4PY + panel2.ClientRectangle.Height - 5, 24, 190), null);//加上Y轴坐标值
}
if (DataList.Count - 1 >= (this.ClientRectangle.Width - panel2PX - groupbox4PX) / unit_drawing)//如果数据量大于可容纳的数据量,即删除最左数据,波形动态显示
{
DataList.RemoveRange(0, DataList.Count - (this.ClientRectangle.Width - panel2PX - groupbox4PX) / unit_drawing - 1);
}
for (int i = 0; i < DataList.Count - 1; i++)
{
BufPicture.DrawLine(Linepen, panel2PX + groupbox4PX + i * unit_drawing, panel2PY + groupbox4PY + panel2.ClientRectangle.Height - DataList[i], panel2PX + groupbox4PX + (i + 1) * unit_drawing, panel2PY + groupbox4PY + panel2.ClientRectangle.Height - DataList[i + 1]); //画出波形图
}
g.Graphics.DrawImage(bmp, panel2PX + groupbox4PX, panel2PY + groupbox4PY, panel2.ClientRectangle.Width, panel2.ClientRectangle.Height);//将内存中画好的图复制到panel当中,最终实现双缓冲
e.Graphics.DrawPath(Pens.Black, gp); //
}
this.graphBuffer.Render();
graphBuffer = (new BufferedGraphicsContext()).Allocate(panel2.CreateGraphics(), panel2.DisplayRectangle);
每次画的时候取graphicsGraphics g = this.graphBuffer.Graphics;
然后drawimage,把坐标系作为背景,再画图案