删除指定轮廓

删除指定轮廓

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;//将剩余轮廓点数保存
}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值