C++将图像旋转正负90°及180°

  此案例讲的是分通道的图像(就是RGB不同的通道分别保存,分了三块内存),以下代码只是记录用,所以不一定很衔接。
//判断是否需要保存码图像
	int iRotationType = 1;  //自己根据情况设置,1 2 3
	if (0 != iRotationType)
	{
	    //申请三个通道的内存
		char* pdataR = new char[Width * Height];
		char* pdataG = new char[Width * Height];
		char* pdataB = new char[Width * Height];

        //pSrcdataR pSrcdataG pSrcdataB 为源数据内存
        //pdataR pdataR pdataB 为旋转之后的内存
		for (int h = 0; h < Height; h++)
		{
		   	for (int w = 0; w < Width; w++)
		   	{
				switch (iRotationType)
				{
					case 1:
					{
						//向右旋转90°
						pdataR[(Width - w - 1) * Height + h] = pSrcdataR[h * Width + w];
						pdataG[(Width - w - 1) * Height + h] = pSrcdataG[h * Width + w];
						pdataB[(Width - w - 1) * Height + h] = pSrcdataB[h * Width + w];
						break;
					case 2:
					{
						//向左旋转90°
						pdataR[w * Height + (Height - h - 1)] = pSrcdataR[h * Width + w];
						pdataG[w * Height + (Height - h - 1)] = pSrcdataG[h * Width + w];
						pdataB[w * Height + (Height - h - 1)] = pSrcdataB[h * Width + w];
						break;
					}
					case 3:
					{
						//旋转180°
						pdataR[(Height - h - 1) * Width + (Width - w - 1)] = pSrcdataR[h * Width + w];
						pdataG[(Height - h - 1) * Width + (Width - w - 1)] = pSrcdataG[h * Width + w];
						pdataB[(Height - h - 1) * Width + (Width - w - 1)] = pSrcdataB[h * Width + w];
						break;
					}
				}
					default:
						break;
				}
		   	}
		 }

        //主意宽高的变化
        //判断宽高是否需要对调 
		if (1 == iRotationType || 2 == iRotationType)
		{
	       //宽高进行交换
		}
        //TODO 将旋转好的内存,再进行通道合并即可,不再赘述。
        //删除内存
		delete[] pSrcdataR;
	    delete[] pdataR;
	    delete[] pdataG;
	    delete[] pdataB;
	}
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值