RGB格式图片的裁剪函数

#define OK 		(0)
#define FAIL	(-1)

typedef struct point
{
	int x;
	int y;
}point_t;

//裁剪区域信息
typedef struct rect
{
	point_t ul;//up-left 左上角坐标
	point_t lr;//low-right 右下角坐标
}rect_t;

/************************************************************
*函数名:RGB_Crop_Image
*描述:对RGB图片按坐标进行裁剪
*输入:pSrcImage 原始RGB数据
*	  width		原始RGB图像的宽
*	  height	原始RGB图像的高
*	  rect		裁剪区域信息
*输出:pDstImage 裁剪后的RGB数据
*返回值:OK 		成功
*		FAIL	失败
*************************************************************/
int RGB_Crop_Image(char *pSrcImage, int width, int height, char *pDstImage, rect_t rect)
{
	int i, j;
	int crop_width, crop_height;
	char *pSrc = (pSrcImage + rect.ul.y * width * 3);
	char *pDst = PDstImage;
	
	if(pSrcImage == NULL || pDstImage == NULL)
	{
		printf("pointer is invalid; pSrcImage(%p) pDstImage(%p)", pSrcImage, pDstImage);
		return FAIL;
	}
	
	crop_width = rect.lr.x - rect.ul.x;
	crop_height = rect.lr.y - rect.ul.y;
	
	if(crop_width > width || crop_height > height || crop_width < 0 || crop_height < 0)
	{
		printf("coordinate error\n");
		return FAIL;
	}
		
	for(j = rect.ul.y; j < rect.lr.y; j++)
	{
		for(i = rect.ul.x; i < rect.lr.x; i++)
		{
			pDst[0] = pSrc[i*3];
			pDst[1] = pSrc[i*3+1];
			pDst[2] = pSrc[i*3+2];
			pDst += 3;
		}
		pSrc += width * 3;
	}
	
	return OK;
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

正在起飞的蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值