2010-09-07 45 views
0

我在GTK \ C中創建圖像編輯程序,我無法弄清楚如何進行縮放工作;我需要將我的基於開羅的畫布放大到鼠標光標的位置,但開羅只縮放到它顯示的圖像的中心。解決這個問題的正常方法是轉換,縮放,然後轉換回來;但是這會弄亂我畫布周圍的滾動條。放大鼠標位置而不搞亂滾動條?

我的想法是向後滑動滾動條以補償由縮放引起的移動。移動滾動條mouse_position * (new_zoom - old_zoom)應該可以工作,但它不會;它在低縮放級別下校正不足,然後在高級別上過度校正。

如何正確縮放?

我的代碼是在這裏看到,如果它可以幫助:ScreenSnap on Github

回答

0

它看起來像你需要你的光柵尺在你的代碼當前縮放級別。所以這一行:

shift_x = self-> zoom_point_x *(self-> zoom_level/.9 - self-> zoom_level);

應該是:
shift_x =自我> zoom_point_x *(自> zoom_level/0.9 - 自我> zoom_level)/(自> zoom_level);

請注意,您的逼近工作在縮放級別爲1,但是當您移開或者不在正確的位置時。

+0

咦?如果我替換那一行,那麼self> zoom_point_x沒有任何數據,我需要爲這個shift_x =行。你的意思是替換它下面的行嗎? – snostorm 2010-09-17 11:21:51

+0

對不起,我複製並粘貼了錯誤的行!現在看看。 – dave 2010-09-18 01:27:52

+0

嗯......這似乎不工作。它現在一直大量欠缺校正。 – snostorm 2010-09-18 12:45:43