【问题标题】:2D image rotation, few issues2D图像旋转,几个问题
【发布时间】:2010-01-26 00:42:23
【问题描述】:

我将“鼠标旋转”添加到我的 2D 绘图程序中。通过基本上计算从原始鼠标单击到鼠标当前所在位置的旋转角度,我已经使所有代码正常工作。

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

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

然而,旋转一个矩形图像之后,它的新宽度和高度要大得多,因为这两个屏幕截图应该有助于澄清:During rotationafter rotating then rotating again——小“手柄”显示图像的 x/y/width/height 延伸到的位置

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

有人知道如何解决这个问题吗?

【问题讨论】:

    标签: graphics 2d rotation


    【解决方案1】:

    根据经验,永远不要旋转/调整先前旋转的图像,因为小错误会开始蔓延。

    一般来说,保留原始图像的副本并根据该图像进行基本所有更改会更容易。

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

    不确定这是否有帮助,或者我是否误读了您的问题。

    【讨论】:

    • 嗨,谢谢,我想这就是这样做的方法。我确实保留了原始图像,并以此为基础进行所有缩放/旋转。这导致了另一个问题......我也有缩放代码,但不知道如何将它与旋转代码合并。每个 Image 类都会保留实例旋转/缩放变量,但我应该先旋转还是重新缩放?
    • 另一个问题是我基本上使用 wxWidgets 的图像旋转代码 - 我在图像角落的“重新缩放手柄”是根据 GetWidth/Height 返回的值绘制的。我现在是否应该在旋转后跟踪(轮廓)矩形的 x/y/width/height,并使用这些值来确定手柄的定位?
    • 先旋转还是先缩放,缩放是否均匀,缩放和旋转的中心是否相同都没有关系。但是,如果您以不同的比率拉伸 X 和 Y,或者缩放的原点与旋转的原点不同,那么顺序很重要
    【解决方案2】:

    您可能应该跟踪图像的当前旋转,以便您可以在图像当前旋转时围绕图像重新绘制矩形。如果您需要旋转超过 1 个物体,则必须跟踪图层以及每个图层的旋转。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多