删除指定轮廓

来源:互联网 发布:java ee 新闻策划案例 编辑:程序博客网 时间:2024/06/06 03:52

删除指定轮廓

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;//尾位置+1offset_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;//将剩余轮廓点数保存}


0 0