2010-01-26 41 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

您需要存儲圖像的原始尺寸和當前的旋轉角度,以便您可以正確有效地取消旋轉。另外,您需要保存原始圖像數據。

現在發生的情況是,您的程序丟失了有關原始圖像大小的信息,因此它會使用它看到的(正確)。你想要的是從原始圖像數據重新繪製,只是旋轉不同。