【发布时间】:2013-10-29 04:34:06
【问题描述】:
我正在尝试编写这个在 C 中处理 bmp 图像的程序,到目前为止,我已经设法将其旋转:
for (row=0; row < rows; row++)
for (col=0; col < cols; col++)
{
(*new) + rows*col + (rows - row -1) = original + row*cols + col;
}
其中:Original = 原始 bmp,new = 新 bmp 的大小取决于我要应用的旋转量。两者都是指向 bmp 的指针,而 new 是指向指针的指针。 我已经做了几次数学运算,当它实际上应该顺时针旋转时它会逆时针旋转。这是一个问题,但我想我可以逆时针翻转它足够的时间让它看起来顺时针旋转。我的问题是:我将如何从原始 bmp 图像进行多次旋转,并使其最终出现在我正在创建的新 bmp 图像上。 也就是说,我怎样才能多次执行上述操作而仍然只有 1 个正确大小的输入和 1 个输出文件。 我想用指针来做这件事,因为它会让我更容易在其他过程中操作输出。 我希望这是足够的细节。
谢谢。
【问题讨论】:
-
我建议你在方格纸上做一个简单的矩形,并用唯一的数字填充矩形中的正方形。然后你“旋转”那个矩形。这样你会发现其实很简单。
-
对,我已经做到了,我了解了旋转的工作原理。我的问题实际上不是旋转它,而是如何多次旋转。我必须为每次迭代创建新指针,而且我不确定如何多次执行,如果我想实现,我必须多次为原始指针和新指针创建一个新指针,比如说, 270 度旋转。
-
是一样的。例如,旋转 180 度实际上比旋转 90 度更简单。因此,对于 270 度旋转,执行 180 度和 90 度。您只需要两个“指针”,即源位图和目标位图,它们都将同样大(除了 90 度和 270 度的宽度和高度切换位置)。
-
我想我只是不明白,我不知道如何在 1 次坐姿中进行多次旋转,因为我有原始 bmp,输出 bmp,这是 2 差异.内存中的位置。我必须再次应用旋转,但我不能从原始图像中执行此操作,我必须从输出中执行此操作,否则它只会再次旋转原始图像。因此,我需要内存中的第三个位置来存储新输出,然后将已经转换的图像再次旋转到新输出中。我有原始文件、90 度的输出和下一个输出。下面继续..
-
是的,我可以通过将 90 和 180 的旋转相加来完成所有旋转,但是我仍然需要在内存中排名第三。我真的没有看到任何其他解决方法,并且有些事情告诉我这是低效的。