/// <summary>
        /// 去除图片的多余边界
        /// </summary>
        /// <param name="index"></param>
        private void RemoveRedundance(int index, double left, double top)
        {
            System.Drawing.Bitmap bitmapSource = ConvertClass.BitmapImageToBitMap((BitmapImage)keyFrames[index].Image.Source);
            System.Drawing.Bitmap bitmapTarget = new System.Drawing.Bitmap(bitmapSource.Width, bitmapSource.Height);
            StylusPointCollection points       = trackStroke.StylusPoints;
            double pointWidth = keyFrames[index].Image.Width / bitmapSource.Width;

            unsafe
            {
                if (index == 0)
                {
                    for (int i = 0; i < bitmapSource.Width; i++)
                    {
                        for (int j = 0; j < bitmapSource.Height; j++)
                        {
                            System.Drawing.Color pixelColor = bitmapSource.GetPixel(i, j);
                            System.Drawing.Color newColor   = System.Drawing.Color.FromArgb(255, pixelColor.R, pixelColor.G, pixelColor.B);
                            StylusPoint          currPoint  = new StylusPoint(left + i * pointWidth, top + j * pointWidth);
                            int    preIndexInStroke         = points.IndexOf(keyPoints[index > 0 ? index - 1 : 0]);
                            int    nextIndexInStroke        = trackStroke.StylusPoints.IndexOf(keyPoints[index < keyPoints.Count - 1 ? index + 1 : keyPoints.Count - 1]);
                            double distance = distanceP2Points(currPoint, points, preIndexInStroke, nextIndexInStroke);
                            if (distance > imageHeight / 2)
                            {
                                newColor = System.Drawing.Color.FromArgb(0, pixelColor.R, pixelColor.G, pixelColor.B);
                            }
                            bitmapTarget.SetPixel(i, j, newColor);
                        }
                    }
                }
                else
                {
                    //去除无用边界
                    int preIndexInStroke  = points.IndexOf(keyPoints[index > 0 ? index - 1 : 0]);
                    int nextIndexInStroke = trackStroke.StylusPoints.IndexOf(keyPoints[index < keyPoints.Count - 1 ? index + 1 : keyPoints.Count - 1]);

                    StylusPoint middleKeyPoint           = new StylusPoint(points[(preIndexInStroke + nextIndexInStroke) / 2].X, points[(preIndexInStroke + nextIndexInStroke) / 2].Y);
                    double      maxDistanceCurr2MiddleKP = 0;
                    for (int i = 0; i < bitmapSource.Width; i++)
                    {
                        for (int j = 0; j < bitmapSource.Height; j++)
                        {
                            System.Drawing.Color pixelColor = bitmapSource.GetPixel(i, j);
                            System.Drawing.Color newColor   = System.Drawing.Color.FromArgb(255, pixelColor.R, pixelColor.G, pixelColor.B);
                            StylusPoint          currPoint  = new StylusPoint(left + i * pointWidth, top + j * pointWidth);
                            double distance = distanceP2Points(currPoint, points, preIndexInStroke, nextIndexInStroke);
                            if (distance > imageHeight / 2)
                            {
                                newColor = System.Drawing.Color.FromArgb(0, pixelColor.R, pixelColor.G, pixelColor.B);
                            }
                            else
                            {
                                double DistanceCurr2PreKP  = MathTool.getInstance().distanceP2P(currPoint, keyPoints[index - 1]);
                                double DistanceCurr2CurrKP = MathTool.getInstance().distanceP2P(currPoint, keyPoints[index]);
                                if (DistanceCurr2PreKP < DistanceCurr2CurrKP)
                                {
                                    double DistanceCurr2MiddleKP = MathTool.getInstance().distanceP2P(currPoint, middleKeyPoint);
                                    if (DistanceCurr2MiddleKP > maxDistanceCurr2MiddleKP)
                                    {
                                        maxDistanceCurr2MiddleKP = DistanceCurr2MiddleKP;
                                    }
                                }
                            }

                            bitmapTarget.SetPixel(i, j, newColor);
                        }
                    }
                    //添加渐变效果
                    for (int i = 0; i < bitmapSource.Width; i++)
                    {
                        for (int j = 0; j < bitmapSource.Height; j++)
                        {
                            System.Drawing.Color pixelColor = bitmapTarget.GetPixel(i, j);
                            if (pixelColor.A != 0)
                            {
                                System.Drawing.Color newColor  = System.Drawing.Color.FromArgb(255, pixelColor.R, pixelColor.G, pixelColor.B);
                                StylusPoint          currPoint = new StylusPoint(left + i * pointWidth, top + j * pointWidth);
                                double DistanceCurr2PreKP      = MathTool.getInstance().distanceP2P(currPoint, keyPoints[index - 1]);
                                double DistanceCurr2CurrKP     = MathTool.getInstance().distanceP2P(currPoint, keyPoints[index]);
                                double distance = distanceP2Points(currPoint, points, preIndexInStroke, nextIndexInStroke);

                                //为了衔接效果好,没有在前一副图片的点,不修改透明度

                                bool isInPreImage = MathTool.getInstance().isCloseRectangle(new Point(currPoint.X, currPoint.Y),
                                                                                            MathTool.getInstance().RectToRectangle(new Rect(keyFrames[index - 1].Image.Margin.Left, keyFrames[index - 1].Image.Margin.Top, keyFrames[index - 1].Image.Width, keyFrames[index - 1].Image.Height)), 0);

                                if (isInPreImage && maxDistanceCurr2MiddleKP != 0 && DistanceCurr2PreKP < DistanceCurr2CurrKP)
                                {
                                    double DistanceCurr2MiddleKP = MathTool.getInstance().distanceP2P(currPoint, middleKeyPoint);
                                    double rate = 1 - DistanceCurr2MiddleKP / maxDistanceCurr2MiddleKP;
                                    newColor = System.Drawing.Color.FromArgb((byte)(255 * rate), pixelColor.R, pixelColor.G, pixelColor.B);
                                }
                                //if (distance <= imageHeight / 2 && distance >= imageHeight / 3)
                                //{
                                //    newColor = System.Drawing.Color.FromArgb(255, pixelColor.R, pixelColor.G, pixelColor.B);
                                //}
                                bitmapTarget.SetPixel(i, j, newColor);
                            }
                        }
                    }
                }
                MemoryStream ms = new MemoryStream();
                bitmapTarget.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
                BitmapImage bitmapImage = new BitmapImage();
                bitmapImage.BeginInit();
                bitmapImage.StreamSource = new MemoryStream(ms.ToArray());
                bitmapImage.EndInit();
                keyFrames[index].Image.Source = bitmapImage;
            }
        }