2011-08-05 66 views
5

Tôi có một hình ảnh trong điều khiển xem hình ảnh. Người dùng có thể thực hiện xoay và thu phóng trên hình ảnh này, do tọa độ x và y của hình ảnh liên tục thay đổi. Có cách nào để tìm ra tọa độ x và y hiện tại của hình ảnh bên trong điều khiển hình ảnh không? Bất kỳ mã nào liên quan đến nó sẽ có lợi hơn.Làm thế nào để có được tọa độ x và y của hình ảnh bitmap trong điều khiển hình ảnh?

+1

Check it out liên kết này có thể hữu ích ..... http://stackoverflow.com/questions/2447564/detect-touch-on-bitmap – Uttam

Trả lời

11

ImageView sử dụng lớp Ma trận để thực hiện thu phóng (Thu phóng) và dịch (pan). Nếu bạn có thể giữ ma trận, thì bạn có thể truy xuất tọa độ (trái, trên) của chế độ xem được thu phóng/thu nhỏ.

Mã cho Zoomable & ImageView mở rộng pannable có sẵn trong một trong những stackoverflow posts

Trong bài đăng mà bạn sẽ thấy lớp ImageView mở rộng có ma trận như là một biến thành viên được sử dụng để mở rộng quy mô/dịch.

Bạn có thể sử dụng Mã sau đây để nhận được giới hạn của hình ảnh thu nhỏ/được phân rã (thực tế là bitmap) từ ma trận.

RectF r = new RectF(); 
matrix.mapRect(r); 
Log.i(TAG, "Rect " + r.left + " " + r.top + " " + r.right + " " + r.bottom + " " + mOverAllScale + " "); 

mới được bổ sung ĐÁP

Để hiểu mã dưới đây, bạn cần phải đi qua link này và hiểu được.

Dịch

Khi người dùng kéo hình ảnh, màn hình phối hợp (Absolute) và Bitmap phối hợp không đồng bộ hóa. [Bất cứ điều gì bạn viết vào bitmap được hiển thị thông qua canvas (trong onDraw())] Nếu áp dụng màu, người dùng sẽ thấy nó được áp dụng trên một vùng khác trên hình ảnh bitmap. Để sửa lỗi này, bạn cần dịch. Bản dịch sẽ thay đổi các điều phối đầu vào của người dùng (là các tọa độ màn hình) thành các tọa độ bitmap (theo ý định của người dùng) Đoạn mã sau sẽ giúp bạn thực hiện việc dịch.

Hãy nhập người dùng tọa độ là (x, y) sau đó,

RectF r = new RectF(); 
matrix.mapRect(r); 
Log.i(TAG, "Rect " + r.left + " " + r.top + " " + r.right + " " + r.bottom + " " + mOverAllScale + " "); 
float newX = x - r.left; 
float newY = y - r.top; 

Bạn sử dụng mới tọa độ ở vị trí của (x, y).

Zooming (Scaling)

Khi người dùng nhúm vào/ra; bitmap được Thu nhỏ/Phóng to. Bạn phải quan sát rằng bitmap gốc không bị thay đổi, việc thu phóng chỉ từ phối cảnh hiển thị. Điều này một lần nữa dẫn đến mất đồng bộ giữa màn hình và bitmap. Màu được áp dụng trên màn hình sẽ được phản ánh trong hình ảnh được hiển thị. Đoạn mã sau sẽ giúp bạn thực hiện chia tỷ lệ.

// mScalingFactor shall contain the scale/zoom factor 
float scaledX = (event.getX() - r.left); 
float scaledY = (event.getY() - r.top); 

scaledX /= mScalingFactor; 
scaledY /= mScalingFactor; 

Shash

+0

nhờ Shash. Vui lòng cho tôi biết về những phát hiện của bạn. –

+0

Đã chỉnh sửa câu trả lời – Shash316

+0

Cảm ơn rất nhiều Shash. –

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