2013-02-14 26 views
5

Tôi đang phát triển một ứng dụng Android làm méo mó hình ảnh. Tôi đang sử dụng tính năng dịch và chỉnh tỷ lệ để làm biến dạng hình ảnh. Ảnh bị bóp méo. Tôi muốn triển khai tính năng hoàn tác. Nhưng không thể thực hiện các chức năng. Bất kỳ ai có thể giúp làm thế nào để thực hiện chức năng hoàn tác trong opengl. Bất kỳ đề nghị hoặc mã sẽ hữu ích. Cảm ơn trước.cách triển khai chức năng hoàn tác trong opengl trong android

+1

Điều này không liên quan gì đến OpenGL. OpenGL chỉ vẽ những gì bạn yêu cầu nó vẽ. Bất kỳ chức năng hoàn tác nào là về việc thay đổi những gì bạn yêu cầu nó vẽ để trở thành những gì nó từng là. –

+0

@NicolBolas thực sự tôi đang bóp méo hình ảnh khi chạm ngón tay. Hình ảnh co lại hoặc phồng lên. Câu hỏi đặt ra là, những gì tôi nên lưu trữ và làm thế nào để phản ánh nó trên quan điểm. –

+0

Tôi tin rằng bạn nên lưu trữ hình ảnh hiện tại trên mỗi lần bắt đầu chạm. Sau đó, khi hoàn tác được thực hiện, chỉ cần thả hình ảnh hiện tại và thay thế nó bằng hình ảnh cuối cùng trong hàng đợi. Một số hoạt động có thể được đảo ngược bằng cách sử dụng opengl, nhưng tôi không nghĩ rằng bạn nên sử dụng các tính năng như vậy ở đây. Chỉ cần lưu trữ bản gốc và mỗi thao tác bạn đã thực hiện bằng ngón tay hoặc hình ảnh cho mỗi bước. – Pihhan

Trả lời

0

Ray Tayek là đúng. Sử dụng mẫu lệnh. Tức là, đối với mọi hành động mà người dùng thực hiện, bạn đẩy hành động đó (lệnh) và bất kỳ dữ liệu nào liên quan đến hành động đó trên ngăn xếp Hoàn tác.

Hãy xem xét chương trình vẽ để đơn giản. Quy trình này có thể áp dụng trực tiếp cho ứng dụng OpenGL của bạn. Người dùng vẽ một đường từ x1, y1 đến x2, y2. Lệnh có thể được biểu diễn như sau:

command = DrawLine 
data = x1, y1, x2, y2 

Có thể bạn cần ít nhất hai lớp cho dữ liệu Hoàn tác, nhưng chúng sẽ được triển khai nhỏ và dễ dàng. Khi người dùng muốn hoàn tác, chỉ cần bật đối tượng trên cùng ra khỏi ngăn xếp Hoàn tác, xem nó và thực hiện hành động hoàn tác liên quan (cụ thể cho từng loại lệnh). Hoặc, bạn thậm chí có thể bao gồm hành động hoàn tác trong từng đối tượng lệnh. Sau đó, đẩy lệnh hoàn tác trên ngăn xếp Làm lại.

Điều này là đủ để bạn bắt đầu. HTH

+0

Tôi sửa đổi câu trả lời ở trên. Đối với đồ họa 3D, DwB có một cách tiếp cận tốt. Sử dụng hình ảnh chưa được sửa đổi như một phần của dữ liệu Hoàn tác của bạn. – Frecklefoot

2

Tôi nghi ngờ rằng mẫu lệnh không đủ cho trường hợp của bạn. Điều này được dựa trên giả định của tôi là không dễ dàng để đảo ngược biến dạng hình ảnh ngay cả khi bạn biết sự biến dạng đã được áp dụng.

Thay vào đó, có thể bạn sẽ cần phải đẩy hình ảnh lên ngăn xếp ngay trước khi áp dụng méo. Sau đó, triển khai hoàn tác sẽ thay thế hình ảnh hiện tại bằng hình ảnh trên ngăn xếp. Điều này sẽ dẫn đến các vấn đề tiềm tàng thú vị do kết hợp làm lại và hoàn tác.

Bạn có thể tối ưu hóa đối tượng lệnh lưu trữ này để thay đổi dễ dàng đảo ngược và lưu trữ hình ảnh cho những thay đổi không dễ dàng đảo ngược.

Các vấn đề liên quan