图像旋转和翻转

功能介绍

对一幅图像进行简单的操作。图像的内容可以理解成是一个矩阵。对图像的操作,即是对矩阵的操作。

图像顺时针旋转90,180和270度

// 函数名称:    imageSpin
// 创建日期:	2022/01/12
// 函数说明:	图像旋转
// 返回值:  	无
// 入参说明:	resource ---原始图像指针
//				result   ---存放旋转后图像指针(需外部申请传入)
//				row      ---图像宽度
//				col		 ---图像高度
//				imageDeep---图像深度
//				angel    ---表示旋转角度:顺时针90入参为0,顺时针180入参为1,顺时针270入参为2
void imageSpin(char* resource, char* result,int row,int col, int imageDeep, int angel)
{
	int rowCount = row;
	int colCount = col;
	switch (angel)
	{
#pragma region 顺时针旋转90case 0:
	{
		for (int i = 0; i < rowCount; i++)
		{
			for (int j = 0; j < colCount; j++)
			{
				for (int n = 0; n < imageDeep; n++)
				{
					result[j * rowCount * imageDeep + (rowCount - 1 - i) * imageDeep + n] = resource[i * colCount * imageDeep + j * imageDeep + n];
				}
			}
		}
	}
		break;
#pragma endregion

#pragma region 顺时针旋转180case 1:
	{
		for (int i = 0; i < rowCount; i++)
		{
			for (int j = 0; j < colCount; j++)
			{
				for (int n = 0; n < imageDeep; n++)
				{
					result[(rowCount - 1- i) * colCount * imageDeep + (colCount -1 -j)*imageDeep + n] =  resource[i * colCount * imageDeep + j * imageDeep + n];
				}
			}
		}

	}
		break;
#pragma endregion

#pragma region 顺时针旋转270case 2:
	{
		for (int i = 0; i < rowCount; i++)
		{
			for (int j = 0; j < colCount; j++)
			{
				for (int n = 0; n < imageDeep; n++)
				{
					result[(colCount - 1 - j) * rowCount * imageDeep + i * imageDeep + n] = resource[i * colCount * imageDeep + j * imageDeep + n];
				}
			}
		}
	}
		break;
#pragma endregion
	default:
		break;
	}
}

图像上下,左右镜像

// 函数名称:    imageOverturn
// 创建日期:	2022/01/12
// 函数说明:	图像翻转
// 返回值:  	无
// 入参说明:	resource ---原始图像指针
//				result   ---存放旋转后图像指针(需外部申请传入)
//				row      ---图像宽度
//				col		 ---图像高度
//				imageDeep---图像深度
//				mode	 ---翻转模式:   水平翻转入参为0,上下翻转入参为1
void imageOverturn(char* resource, char* result,int row,int col, int inamgeDeep, int mode)
{
	int  rowCount = row;
	int  colCount = col;
	int imageDeep = inamgeDeep;
	switch(mode)
	{
#pragma region 左右镜像
	case 0:
	{
		for (int i = 0; i < rowCount; i++)
		{
			for (int j = 0; j < colCount; j++)
			{
				for (int n = 0; n < imageDeep; n++)
				{
					result[i * colCount * imageDeep + (colCount - 1- j )* imageDeep + n] = resource[i * colCount * imageDeep + j * imageDeep + n];
				}
			}
		}
	}
		break;
#pragma endregion

#pragma region 上下镜像
	case 1:
		for (int i = 0; i < rowCount; i++)
		{
			memcpy_s(result + (rowCount - 1 - i) * colCount * imageDeep, colCount * imageDeep, resource + i * colCount * imageDeep, colCount * imageDeep);
		}
		break;
#pragma endregion
	default:
		break;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值