private void BorderGrid_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            int flag = 0;
            int feathernum = borderRegion.Count;
            borderRegion.Clear();
            showborder.Clear();
            while (flag < feathernum)
            {
                Numberborder tmp = new Numberborder();
                int pointX = int.Parse(BorderdataGrid.Rows[flag].Cells[0].Value.ToString());
                int pointY = int.Parse(BorderdataGrid.Rows[flag].Cells[1].Value.ToString());
                tmp.start = new Point(pointX, pointY);
                tmp.size = templetFlag.templetSize;
                //tmp.FeatherName = BorderdataGrid.Rows[flag].Cells[3].Value.ToString();
                borderRegion.Add(tmp);

                Point tmpPoint = new Point((int)(pointX * Math.Pow(2, SizeChangecount)), (int)(pointY * Math.Pow(2, SizeChangecount)));
                tmp.start = tmpPoint;
                tmp.size = new Size((int)(templetFlag.templetSize.Width * Math.Pow(2, SizeChangecount)), (int)(templetFlag.templetSize.Height * Math.Pow(2, SizeChangecount)));
               // tmp.end = tmpPoint;
                showborder.Add(tmp);
                flag++;
            }
            picturebox.Invalidate();
        }
        private void pictureBox_MouseDown(object sender, MouseEventArgs e)
        {
            Point pt = new Point(e.X, e.Y);
            if (e.Button == MouseButtons.Left && isSreenShot)
            {
                startpoint = pt;
                startdraw = true;
            }
            else if (e.Button == MouseButtons.Left && isaddFeather)   //点击添加特征点状态
            {
                Rectangle rec = new Rectangle(pt.X, pt.Y, featherSize.Width, featherSize.Height);
                featherRgnstruct tmpfeather = new featherRgnstruct();
                tmpfeather.featherNum = defaultValue;
                tmpfeather.rec = rec;

                Graphics g = (sender as PictureBox).CreateGraphics();

                if (FeatherdataGrid.Rows.Count < NumberPoints*10)//特征点上限不超过300个
                {
                    g.DrawRectangle(Pens.Blue, new Rectangle(rec.X - (featherSize.Width - 1) / 2, rec.Y - (featherSize.Height - 1) / 2, featherSize.Width, featherSize.Height));
                    FeatherdataGrid.Rows.Add(tmpfeather.rec.X, tmpfeather.rec.Y, tmpfeather.featherNum);
                    showfeature.Add(tmpfeather);
                    tmpfeather.rec.X = (int)(tmpfeather.rec.X * Math.Pow(2, -SizeChangecount));
                    tmpfeather.rec.Y = (int)(tmpfeather.rec.Y * Math.Pow(2, -SizeChangecount));
                    featherRegion.Add(tmpfeather);
                    //UpdataTemplet();
                }
                g.Dispose();
            }
            else if (e.Button == MouseButtons.Left && isaddNumborder)  //点击添加识别区域
            {
                if (BorderdataGrid.Rows.Count < 10)
                {
                    Rectangle rec = new Rectangle(pt, new Size((int)(templetFlag.templetSize.Width * Math.Pow(2, SizeChangecount)), (int)(templetFlag.templetSize.Height * Math.Pow(2, SizeChangecount))));
                    Graphics g = (sender as PictureBox).CreateGraphics();
                    g.DrawRectangle(Pens.Blue, rec);

                    Numberborder tmpnumberborder = new Numberborder();
                    tmpnumberborder.start = new Point((int)(pt.X * Math.Pow(2, -SizeChangecount)), (int)(pt.Y * Math.Pow(2, -SizeChangecount)));
                    tmpnumberborder.size = templetFlag.templetSize;
                    //tmpnumberborder.FeatherName = CurrentTempletName;
                    borderRegion.Add(tmpnumberborder);
                    BorderdataGrid.Rows.Add(tmpnumberborder.start.X, tmpnumberborder.start.Y, CurrentTempletName);

                    tmpnumberborder.start = pt;
                    tmpnumberborder.size = rec.Size;

                    showborder.Add(tmpnumberborder);   //识别区域模板
                    g.Dispose();
                }
            }
            else if (e.Button == MouseButtons.Left && isMeasureLen)
            {
                startMeasure = true;
                measureStartPoint = new Point((int)(e.X * Math.Pow(2, -SizeChangecount)), (int)(e.Y * Math.Pow(2, -SizeChangecount)));

            }
            else if (e.Button == MouseButtons.Right)
            {
                #region 右击改变特征点的值
                #endregion
            }
            if (isDrawTemplate)   //进入绘制模板边框状态
            {

                templetLoc = new Point(e.X, e.Y);   //记录模板开始的点
                SetTemplettextBox2.Text = e.X.ToString() + "," + e.Y.ToString();
                CurrentTemplet = new Point(e.X, e.Y);
                startDrawTemplet = true;   //正在进行模板绘制
            }
            picturebox.Invalidate();
        }
        //将特征点数据保存到feather.h文件中
        private void SaveFeather()
        {
            StreamWriter streamwriter;
            string alltext = null;
            string data = null;
            int count = 0;
            string VersonNum = "0,";
            string IsGray = "0,";
            if (File.Exists(savePath + "\\feather.h"))
                File.Delete(savePath + "\\feather.h");
            streamwriter = File.CreateText(savePath + "\\" + "feather.h");
            alltext += VersonNum;
            alltext += IsGray;
            alltext += CameraData;
            try
            {
                leftX = borderRegion.First().start.X;
                leftY = borderRegion.First().start.Y;
                rightX = borderRegion.First().start.X + borderRegion.First().size.Width;
                rightY = borderRegion.First().start.Y + borderRegion.First().size.Height;
                foreach (Numberborder tmp in borderRegion)
                {
                    if (tmp.start.Y + borderRegion.First().size.Height > rightY)
                    {
                        rightY = tmp.start.Y + borderRegion.First().size.Height;
                    }
                    if (tmp.start.X + borderRegion.First().size.Width > rightX)
                    {
                        rightX = tmp.start.X + borderRegion.First().size.Width;
                    }
                    if (tmp.start.X < leftX)
                    {
                        leftX = tmp.start.X;
                    }
                    if (tmp.start.Y < leftY)
                    {
                        leftY = tmp.start.Y;
                    }
                }
            }
            catch
            {
                if (bmp != null)
                {
                    leftX = 0;
                    leftY = 0;
                    rightX = bmp.Size.Width;
                    rightY = bmp.Size.Height;
                }
            }

            alltext += leftX.ToString() + ',' + leftY.ToString() + ',' + rightX.ToString() + ',' + rightY.ToString() ;
            while (count < 10)       //每次识别最多识别十个数字
            {
                Numberborder tmp = new Numberborder();
                //tmp.FeatherName = null;
                if (borderRegion.Count > 0)   //一次设计选择的识别区域均用一套模板来识别
                {
                    tmp = borderRegion.First();
                    borderRegion.Remove(tmp);
                    alltext +=","+ tmp.start.X.ToString()+"," + tmp.start.Y.ToString()+"," + tmp.size.Width.ToString()+"," + tmp.size.Height.ToString();
                }
                else
                {
                    alltext += ",0,0,0,0";

                }
                for (int i = 0; i < NumberPoints*10; i++)
                    alltext +=","+ templetFlag.feathers.featherPoints[i].rec.X.ToString()+","
                        + templetFlag.feathers.featherPoints[i].rec.Y.ToString() + ","+
                        templetFlag.feathers.featherPoints[i].Pixel.ToString()+","
                        + templetFlag.feathers.featherPoints[i].featherNum.ToString();

                count++;
            }
            data += " image_data_packet_desc_type  image_data_packet_desc={" + alltext + "};";
            streamwriter.WriteLine(data);
            streamwriter.Close();
        }
        //右击删除表格内数据
        private void deleteToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                Numberborder flagfeather = new Numberborder();
                flagfeather.start = new Point(int.Parse(BorderdataGrid.CurrentRow.Cells[0].Value.ToString()), int.Parse(BorderdataGrid.CurrentRow.Cells[1].Value.ToString()));

                List<Numberborder> tmpfeatherList1 = new List<Numberborder>();
                foreach (Numberborder tmp in showborder)
                {
                    if (flagfeather.start.Equals(tmp.start))
                    {

                    }
                    else
                    {
                        tmpfeatherList1.Add(tmp);
                    }
                }
                //borderRegion = tmpfeatherList;
                showborder = tmpfeatherList1;
                //tmpfeatherList.Clear();
                List<Numberborder> tmpfeatherList2 = new List<Numberborder>();
                foreach (Numberborder tmp in borderRegion)
                {
                    Numberborder numberborder = new Numberborder();
                    numberborder.start = new Point((int)(tmp.start.X * Math.Pow(2, -SizeChangecount)), (int)(tmp.start.Y * Math.Pow(2, SizeChangecount)));
                    //numberborder.end = new Point((int)(tmp.end.X * Math.Pow(2, -SizeChangecount)), (int)(tmp.end.Y * Math.Pow(2, SizeChangecount)));
                    if (flagfeather.Equals(numberborder))
                    {

                    }
                    else
                    {
                        tmpfeatherList2.Add(tmp);
                    }
                }
                borderRegion = tmpfeatherList2;
                BorderdataGrid.Rows.Remove(BorderdataGrid.CurrentRow);

                picturebox.Invalidate();
            }
            catch (Exception ex)
            {

            }
        }