我的图像翻转算法做错了啥?
Posted
技术标签:
【中文标题】我的图像翻转算法做错了啥?【英文标题】:What did i wrong in my image turn algoritm?我的图像翻转算法做错了什么? 【发布时间】:2020-03-02 14:53:19 【问题描述】:我只想转动图像#1并将其写入内存#2(#1 Body #2 TurnBody)(围绕图像中心旋转)
KI 和 KJ 只是 (i-radius) 和 (j-radius) 用于使用。 SIN 和 COS 只是转角的 sin 和 cos。
半径 - 图片边的一半(我的图片是方形的)
6.28 = pi*2
我需要转的例子
例如我有:
(我不是把所有的图片都转过来,只是在中间放一个小方块,然后把它加到大屏幕上)
TurnAngle - 只是我的全局值(显示图像现在旋转的角度)
void Turn(double angle, int radius, COLORREF* Body, COLORREF* TurnBody)
if (abs(TurnAngle += angle) > 6.28)
TurnAngle = 0;
int i, ki, j, kj;
const double SIN = sin(TurnAngle), COS = cos(TurnAngle);
for (i = 0, ki = -radius; i < 2 * radius; i++, ki++)
for (j = 0, kj = -radius; j < 2 * radius; j++, kj++)
if (Body[i * 2 * radius + j]) // if Pixel not black
TurnBody[static_cast<int>(kj * COS - ki * SIN + radius + (ki * COS + kj * SIN + radius) * 2 * radius)] = Body[i * 2 * radius + j];
这项工作,smth 是错误的 () 或者我不知道的双重值...谢谢你们
this->TurnBody[(int)(kj * COS - ki * SIN) + this->radius + ((int)(ki * COS + kj * SIN) + this->radius) * 2 * this->radius] = this->Body[i * 2 * this->radius + j];
【问题讨论】:
我有一个方形图像,中心小图像周围有许多黑色像素,我不能超出范围,srsly 【参考方案1】:我认为这是错误的:
TurnBody[static_cast<int>(kj * COS - ki * SIN + radius + (ki * COS + kj * SIN + radius) * 2 * radius)] = Body[i * 2 * radius + j];
我觉得应该更像这样:
TurnBody[(int)(kj * COS) + radius + ((int)(kj * SIN) + radius) * 2*radius] = Body[i * 2 * radius + j];
【讨论】:
不,只是试着计算一下。它永远只是一条线。 但我尝试使用 (int) 2 次而不是 static_cast以上是关于我的图像翻转算法做错了啥?的主要内容,如果未能解决你的问题,请参考以下文章