2011-11-19 41 views
20

Tôi có hình ảnh jpg trong thư mục có thể kéo ứng dụng Android có độ phân giải là 1000x600. tôi tải hình ảnh đó để bitmap như thế nàyBitmap getWidth trả về giá trị sai

Bitmap bitMap = BitmapFactory.decodeResource(getResources(), R.drawable.image); 

Sau này tôi gọi bitMap .getWidth() trả về 1500. Làm thế nào nó có thể được? Và làm thế nào để có được chiều rộng và chiều cao của hình ảnh đúng?

Trả lời

38

Điều này có thể do mật độ khác nhau. Tài nguyên của bạn có thể được lưu trữ trong một thư mục mật độ trung bình, nhưng thiết bị của bạn là hdpi. Mật độ trung bình là 160dpi, mật độ cao là 240dpi. Do đó, bitmap của bạn được chia tỷ lệ thành 1,5x kích thước ban đầu. Xem document on multiple screens để biết thêm thông tin.

Nếu tài nguyên không có mật độ chính xác, hệ thống sẽ tải tài nguyên mặc định và chia tỷ lệ lên hoặc xuống khi cần để khớp với mật độ màn hình hiện tại.

Nếu bạn dự định đặt mật độ cao, hãy đặt nó ở chế độ có thể draw-hdpi thay vì drawable hoặc drawable-mdpi.

Cập nhật:

Nếu bạn muốn nó bỏ qua mật độ, đặt nó trong một thư mục drawable-nodpi. Cũng từ cùng một tài liệu:

Cách dễ nhất để tránh quy mô trước là đặt tài nguyên vào thư mục tài nguyên với vòng loại cấu hình nodpi. Ví dụ:

res/drawable-nodpi/icon.png 

Khi hệ thống sử dụng bitmap icon.png từ thư mục này, nó không quy mô nó dựa trên mật độ thiết bị hiện hành.

+0

Trong trường hợp của tôi, tôi không cần chia tỷ lệ đó, tôi cần cùng một hình ảnh với cùng kích thước cho tất cả các màn hình. Giải pháp đầu tiên đến với tâm trí của tôi là sao chép hình ảnh đó vào 3 thư mục có thể kéo được, nhưng không nên có 3 bản sao của cùng một hình ảnh. Có giải pháp nào khác không? –

+2

Bạn có thể đặt chúng trong một thư mục có tên drawable-nodpi nếu bạn không muốn chúng được thu nhỏ. Thông tin thêm tại đây: http://developer.android.com/guide/topics/resources/providing-resources.html – Albin

+0

ok, câu trả lời đã được chỉnh sửa và phần đó đã được thêm vào, cảm ơn mọi người –

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