我正在開發一個扭曲圖像的android應用程序。我使用opengl翻譯和縮放函數來扭曲圖像。圖像扭曲罰款。現在我想實現撤消功能。但是無法實現這些功能。任何人都可以幫助如何在opengl中實現撤消功能。任何建議或代碼都會有所幫助。 在此先感謝。如何在opengl中實現撤消功能android
5
A
回答
0
Ray Tayek是對的。使用命令模式。也就是說,對於用戶執行的每個操作,都會在撤消堆棧上推送該操作(命令)以及與該操作相關的所有數據。
爲了簡單起見,我們來看看油漆程序。該過程直接適用於您的OpenGL應用程序。用戶從x1,y1到x2,y2繪製一條線。該命令可以表示如下:
command = DrawLine
data = x1, y1, x2, y2
您可能需要至少兩個類的撤消數據,但他們會很小,很容易實現。當用戶想要撤銷時,只需將頂部對象從撤銷堆棧中彈出,查看它,然後執行關聯的撤銷操作(特定於每種類型的命令)。或者,您甚至可以在每個命令對象中包含撤消操作。然後按重做堆棧上的撤消命令。
這應該足以讓你開始。 HTH
+0
我修改了上面的答案。對於3D圖形,DwB有一個很好的方法。使用未更改的圖像作爲撤消數據的一部分。 – Frecklefoot 2013-04-02 16:13:34
2
我懷疑命令模式不適合您的情況。這是基於我的假設,即使您知道應用了什麼失真,也不容易扭轉圖像失真。
相反,您可能需要在應用失真之前將圖像推入堆棧。然後,撤銷實現將使用堆棧中的圖像替換當前圖像。這會導致由重做和撤消相結合導致潛在的有趣問題。
您可以優化這個功能,以便存儲命令對象,以便輕鬆修改變化,並存儲圖像,以便更換不易復位的變化。
相關問題
- 1. 如何在Android的繪畫應用中實現撤消功能?
- 2. 在JavaScript中實現撤消功能
- 3. 如何在as3中實現撤消和重做功能
- 4. 在Qt/C++中實現撤消功能(如Ctrl + Z)
- 5. 如何實現撤銷功能
- 6. Google如何在Gmail中實現「撤消」?
- 7. 如何使用Python/Django實現「撤消」功能
- 8. 如何在我的iOS繪畫應用程序中實現撤消功能?
- 9. OpenGL:如何撤消縮放?
- 10. 如何在Android畫布中實現撤消,重做和擦除
- 11. 實現在openGL中左轉功能
- 12. 如何在Eclipse FormEditor中實現撤銷/重做功能?
- 13. JS功能撤消
- 14. Dojo中的撤消功能
- 15. Java中的撤消功能
- 16. 撤消功能在CQ
- 17. 如何撤消git flow功能結束?
- 18. 如何撤消KEYUP功能的效果
- 19. 如何使用NSTextview實現撤消
- 20. 如何爲樹視圖實現撤消
- 21. 如何使用NSUndoManager實現撤消?
- 22. 實現強大的持久撤消/重做功能
- 23. 如何在openGL 3.1中實現glEdgeFlag的功能?
- 24. 如何在git中「撤消撤消」?
- 25. 撤消JavaScript替換功能
- 26. 如何使用JavaScript API爲Office加載項實現「撤消」功能
- 27. 撤消實現 - DOM操作
- 28. 撤消重做RichTextBox中使用撤消和恢復功能
- 29. 如何在Android中爲paint中的撤消功能保存位圖?
- 30. 如何實現TextBox的高效撤銷/重做功能
這與OpenGL無關。 OpenGL只是繪製你所描繪的圖畫。任何撤消功能都是關於改變你所說的繪製過去的內容。 – 2013-02-14 11:28:59
@NicolBolas其實我在手指觸摸時會扭曲圖像。圖像縮小或隆起。問題是,我應該存儲什麼以及如何在視圖上反映它。 – 2013-02-14 13:02:12
我相信你應該在每次觸摸開始時存儲當前圖像。然後,撤消完成後,只需放下當前圖像並將其替換爲隊列中的最後一張圖像。有些操作可能會使用opengl反轉,但我認爲你不應該在這裏使用這些功能。只需用手指存儲原始圖像和每個操作,或者每步執行圖像。 – Pihhan 2013-02-14 13:27:25