2010-01-26 43 views
2

我正在向我的2D绘图程序添加“鼠标旋转”。通过基本计算从原始鼠标点击到鼠标当前位置的旋转角度,我已经掌握了所有代码的工作原理。2D图像旋转,几个问题

我还绘制了一个透明的矩形,它可以旋转,而不是实际上在每个鼠标移动事件上旋转图像。

现在,我的问题是这个矩形的绘制。我从图像的x/y位置绘制矩形,其宽度/高度就是图像报告的内容。

然而,旋转矩形图像,它的新高度和宽度要大得多,因为这两个截图应该有助于澄清:During rotation,并after rotating then rotating again - 小“处理”显示在图片X/Y /宽度/高度延伸到

在第二个屏幕截图中,由于旋转,图像被填充,带有空格(很难用文本描述!)。例如。 200x100的图像在旋转后最终可能会达到150x150(大约),这在第二次调整大小时看起来有点奇怪。

有没有人有一个想法如何解决这个问题?

回答

3

作为一个经验法则,从来没有旋转/缩放先前旋转图像作为小错误会开始蠕动。

一般来说,它是更容易保持原始图像的副本,基地的所有更改关闭该图片。

例如,第一次旋转是5度。第二次旋转是15度。要渲染第二张图像,请将原始副本旋转20度并显示该图像。

不知道这是否有帮助,或者如果我误解了你的问题。

+0

嗨,谢谢,我在想这就是做这件事的方法。我保留原始图像,并基于所有缩放/旋转。这导致了另一个问题...我也有缩放代码,但不知道如何将它与旋转代码结合起来。每个Image类将保持实例旋转/缩放变量,但是我应该先旋转还是重新缩放? – 2010-01-26 01:00:59

+0

另一个问题是我基本上使用wxWidgets的图像旋转代码 - 我的图像角落的“重新调整手柄”是从GetWidth/Height返回的值绘制的。现在我应该在旋转后跟踪(轮廓)矩形的x/y /宽度/高度,并使用这些值来确定手柄的位置? – 2010-01-26 01:04:26

+1

无论您是先旋转还是缩放,缩放是否均匀以及缩放和旋转的中心是否相同,都无关紧要。但是,如果以不同的比例拉伸X和Y,或者如果缩放的起点与旋转不同,则顺序很重要 – comingstorm 2010-01-26 07:52:14

0

您应该跟踪图像的当前旋转,以便您可以在当前旋转时重新绘制图像周围的矩形。如果你需要旋转超过1个东西,你将不得不跟踪图层和每个图层的旋转。

0

您需要存储图像的原始尺寸和当前的旋转角度,以便您可以正确有效地取消旋转。另外,您需要保存原始图像数据。

现在发生的情况是,您的程序丢失了有关原始图像大小的信息,因此它会使用它看到的(正确)。你想要的是从原始图像数据重新绘制,只是旋转不同。