Vì vậy, có câu trả lời ngắn và câu trả lời dài.
Câu trả lời ngắn gọn là việc xoay vòng bitmap và khung là một hàm phổ biến, thường được gọi là "xoay" và thường lấy điểm xoay vòng.
Câu trả lời dài hơn là tất cả đồ họa 2D và 3D đều biến thành một thủ thuật đại số ma trận. Đối với mỗi điểm: new_x = factor_1 * old_x + factor_2 * old_y + factor_3 ...
Những yếu tố này hoạt động rất tốt trong ma trận và lý do khiến ma trận trở nên phổ biến. Có một mẹo hay khi bạn kết hợp các phép biến đổi với nhau, vì vậy bạn có thể nêu ra các vấn đề của mình là "lấy canvas cũ, di chuyển nó sao cho điểm chạm là nguồn gốc, xoay nó, và di chuyển nó để nguồn gốc quay lại điểm xúc động. " Hoặc Matrix m = new Matrix() postTranslate (-touch_x, -touch_y) .postRotate (360/20) .postTranslate (touch_x, touch_y) để xoay nó bằng 1/20 vòng tròn mỗi lần. Sau đó, bạn chuyển ma trận cho bất kỳ hàm nào có ma trận "chuyển đổi".
Điều thú vị là bạn thực hiện tất cả các phép tính cho ma trận đó chỉ một lần, và sau đó sử dụng cùng 4 phép nhân trên mỗi điểm và một nhóm thêm. Trong thực tế, điều này là phổ biến đến nỗi các card video và bộ lệnh Intel đều thực hiện công cụ này trong phần cứng. Bạn cũng có thể chỉ nhân các hình ảnh kết quả một lần nữa bởi cùng một ma trận để có được một kế tiếp.
Bây giờ, nếu bạn thực sự yêu cầu hack đồ họa làm cách nào để làm điều này trong một số mã lắp ráp cực nhanh không có bộ nhớ, mẹo là chọn luân phiên và lỗi thành các chuỗi nhỏ nơi bạn không cần bộ đệm .Ví dụ, một vòng xoay 90 độ đơn giản đầu tiên sẽ hoán đổi bốn góc, sau đó nó hoán đổi (góc trên bên trái + 1 trái đi vào góc trên bên phải + 1 đi xuống phía dưới bên phải - 1 trái đi xuống dưới bên trái - 1 xuống, quay trở lại phía trên bên trái + 1). Những thủ thuật này thường chỉ quan trọng đối với các ràng buộc về bộ nhớ.
Cách quá nhiều thông tin. Hãy cho chúng tôi biết thêm về vấn đề của bạn.
Nguồn
2011-10-05 07:02:51
Sử dụng ma trận để áp dụng xoay vòng. –
Bản sao chính xác của http://stackoverflow.com/questions/4166917/android-how-to-rotate-a-bitmap-on-a-center-point – Ronnie
tôi khuyên bạn sử dụng @Emiam câu trả lời, điều này sẽ không sử dụng CPU như Matrix làm. –