删除指定轮廓
typedef struct Contours
{//轮廓点结构体,通过malloc来分配
int height;//bmp Y坐标
int width;//bmp X坐标
int stateFlag;//点类型标志位
} contour;
typedef struct ContourInfo
{//轮廓信息结构体,通过malloc来分配
int position;//记录单个轮廓在轮廓点序列中的起始位置
int count;//记录单个轮廓的点个数
} contourInfo;
void contourDelete( contour* _rContours, const contourInfo* _ContoursInfo, const int _Contour_I )
{
int contour_Position = 0;//需删除的轮廓点的位置
int contour_Count = 0;//需删除的轮廓的偏移量
int contour_Point_Sum = 0;//用于保存轮廓点的总数量
int contour_Memcpy = 0;//需拷贝的contour数量
int contour_Surplus = 0;//剩余轮廓点总数
contour* offset_Start = NULL;//用于删除指定位置轮廓的偏移量头指针
contour* offset_End = NULL;//用于删除指定位置轮廓的偏移量尾指针
contour_Point_Sum = _rContours[0].stateFlag;//保存点总数
contour_Position = _ContoursInfo[ _Contour_I].position;//头位置
contour_Count = contour_Position + _ContoursInfo[ _Contour_I].count;//尾位置+1
offset_Start = _rContours + contour_Position;//输入删除部分的偏移量
offset_End = _rContours + contour_Count;//输入删除部分的偏移量
contour_Memcpy = contour_Point_Sum - contour_Count;//计算拷贝数量
contour_Surplus = contour_Point_Sum - _ContoursInfo[ _Contour_I].count;//计算剩余轮廓点个数
memcpy( offset_Start, offset_End, contour_Memcpy * sizeof( contour) );//拷贝并覆盖删除部分
offset_Start = _rContours + contour_Surplus;//将偏移后需删除的尾部的头指针定位
memset( offset_Start, 0, (_ContoursInfo[ _Contour_I].count) * sizeof( contour) );//剩余位置置0
_rContours[0].stateFlag = contour_Surplus;//将剩余轮廓点数保存
}