图像旋转和镜像
功能介绍
对一幅图像进行简单的操作。图像的内容可以理解成是一个矩阵。对图像的操作,即是对矩阵的操作。
图像顺时针旋转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 顺时针旋转90度
case 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 顺时针旋转180度
case 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 顺时针旋转270度
case 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;
}
}