公司做的时无线定位,客户要求在平面图上作出一个轨迹图来。工作日浅,之前没做过类似的东西,不知道从何下手,而且公司里边就我一个开发,搞需求,后期实施都是我一个,所以问也就无从问起。想到C#里有一个画直线和圆的方法,觉得也能应用吧。经客户同意,两个无线站点间表示移动轨迹用直线连接。
下边是画点和直线的代码(点表示人所在位置,颜色表示状态,如:蓝色为正常,红色为报警):
private void Drawing(int x,int y,Color color) //x,y为当前移动到的坐标
{ if (startFlag == true) //startFlag 判断是否是第一次画 { startFlag = false; btmLine = new Bitmap(@"D:\zthk\zthk\TwoFloor.jpg");//初始化直线位图图像 //画一个圆点 grp = Graphics.FromImage(bm); Pen pen = new Pen(new SolidBrush(color), 0.5f);//声明单色画笔 Rectangle rg = new Rectangle(x, y, 8, 8);//初始化一个矩形 grp.DrawEllipse(pen, rg); grp.FillEllipse(new SolidBrush(color), rg); //保存图片数据 MemoryStream stream = new MemoryStream(); bm.Save(stream, ImageFormat.Jpeg); //输出图片 Response.Clear(); Response.ContentType = "image/jpeg"; Response.BinaryWrite(stream.ToArray()); } else { grp = Graphics.FromImage(btmLine); try { grp.DrawLine(penLine, new Point(startX, startY), new Point(x, y)); MemoryStream temp = new MemoryStream(); btmLine.Save(temp, ImageFormat.Jpeg); MemoryStream Line = temp; Bitmap btmPoint = new Bitmap(temp);//用之前的直线位图初始化点位图 btmLine = new Bitmap(Line);//重新初始化直线位图 grp = Graphics.FromImage(btmPoint); Pen pen = new Pen(new SolidBrush(color), 0.5f); Rectangle rg = new Rectangle(x, y, 8, 8); grp.DrawEllipse(pen, rg); grp.FillEllipse(new SolidBrush(color), rg); //保存图片数据 MemoryStream consoleStream = new MemoryStream(); bm.Save(consoleStream, ImageFormat.Jpeg);//输出图片
Response.Clear(); Response.ContentType = "image/jpeg"; Response.BinaryWrite(consoleStream.ToArray()); } finally { //释放资源 grp.Dispose(); bm.Dispose(); btmLine.Dispose(); btmPoint.Dispose(); } startX = x;//记录X坐标 startY = y;//记录Y坐标}
}本人新手,请老鸟们多多指教。