当前位置:  开发笔记 > 编程语言 > 正文

旋转图像数学(C#)

如何解决《旋转图像数学(C#)》经验,为你挑选了2个好方法。

我有一个有两个点的图像,对齐如下:

|----------------|
|                |
|    .           |
|                |
|          .     |
|                |
|----------------|

我有两个点的X,Y坐标,我需要将图像旋转X度,所以它看起来像这样:

|----------------|
|                |
|                |
|    .     .     |
|                |
|                |
|----------------|

基本上所以他们在彼此旁边对齐,这是什么数学?(C#中的代码示例会更好但不是必需的)



1> Vojislav Sto..:

这取决于您希望将哪个点用作轮换的"中心".让我们将点指向向上和向左的点A,将点指向点B的右侧和下方.如果要绕点A旋转以使点B与其对齐,则以弧度计算旋转角度将如下所示:

double angle = Math.Atan2(pointB.Y - pointA.Y, pointB.X - pointA.X);

我不知道你是如何处理你的图像的,所以只有当你使用System.Drawing.Graphics时,以下内容才适用:

myImage.TranslateTransform(-pointA.X, -pointA.Y);
myImage.RotateTransform((float) angle, MatrixOrder.Append);
myImage.TranslateTransform(pointA.X, pointA.Y, MatrixOrder.Append);

希望能帮助到你.



2> Dead account..:

没有代码,对不起,但是没有代价.

您需要能够通过对源图像进行采样来创建结果图像.您知道旋转角度,因此您现在需要创建一个映射器函数,该函数将结果映射回原始映射.

代码将简单地扫描结果图像的每一行,并将像素映射回原始图像.你可以做一个简单的事;

for (int plotY = 0; plotY < resultHeight; plotY++)
{
   for (int plotX = 0; plotX < resultWidth; plotX++)
   {
         resultImage.PlotPixel(getOriginalPixel(plotX, plotY, angleOfRotation));
   } 
}

所以现在我们只需要神奇的"getOriginalPixel"方法,这就是数学的用武之地.

如果我们将图像旋转0度,则plotX,plotY只是原始图像的X/Y. 但那没什么好玩的.

pickX = x * cos(angle) - y * sin(angle)
pickY = y * cos(angle) + x * sin(angle)

我认为将映射到源像素.你需要检查它是否超出范围并且只返回黑色或者其他东西:)

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有