2011-09-09 5 views
7

Xin chào, tôi đang tạo Bitmap từ hình ảnh png có tên image.png. Hình ảnh có kích thước 75 (chiều rộng) x 92 (chiều cao). Khi tôi chạy mã này:BitmapFactory trả lại hình ảnh lớn hơn nguồn

Bitmap bitmap = BitmapFactory.decodeResource(this.context.getResources(), R.drawable.image 
Log.d("image", "height: " + bitmap.getHeight() + " width: " + bitmap.getWidth()); 

logger bản ghi:

DEBUG/image(3550): height: 138 width: 113 

và hình ảnh trên màn hình lớn hơn hình ảnh khác có kích thước 75 x 92. Tôi có thể làm gì để làm cho android tải hình ảnh với kích thước phù hợp?

+0

bạn có thể nhận được chiều cao và chiều rộng() của drawable lúc chạy, trong mã của bạn? – user370305

Trả lời

11

Có vẻ như mật độ màn hình trên thiết bị của bạn khác với mật độ mà image.png đã được tạo.

Nếu bạn thực sự muốn ngăn chặn sự mở rộng quy mô, bạn có thể thử một trong các cách sau:

  1. Đặt hình ảnh trong res/drawable-nodpi (http://developer.android.com/guide/practices/screens_support.html#qualifiers)

  2. Sử dụng ImageView.ScaleType. TRUNG TÂM (http://developer.android.com/reference/android/widget/ImageView.ScaleType.html)

  3. Chỉ cần thấy câu hỏi có liên quan này trên SO: Android: How to stop Android 1.6+ from scaling images

+0

Việc đầu tiên không ảnh hưởng gì, thứ ba là đúng đối với hình ảnh từ web (tôi đã sử dụng nó) và thứ hai là giải pháp !!! Cảm ơn bạn rất nhiều –

+1

"Đặt hình ảnh trong res/drawable-nodpi" Điều này làm việc hoàn hảo cho tôi bằng cách sử dụng options.OutWidth & options.OutHeight –

3

Trình tải bộ nạp trong BitmapFactory áp dụng tỷ lệ mật độ màn hình trong khi tải. Để ghi đè điều này, hãy cung cấp tỷ lệ inTargetDensity mong muốn trong BitmapFactory.Options trong lệnh gọi tới decodeResource.

+0

Tôi tìm thấy các tùy chọn đó, nhưng tôi muốn hình ảnh được tải chính xác trên tất cả các thiết bị, không chỉ cho một mật độ. –

+0

Tôi giả sử bạn muốn tải ở kích thước pixel gốc trên bất kỳ thiết bị nào, phải không? Nếu hình ảnh của bạn nằm trong thư mục tài nguyên có thể kéo, hãy đặt trongTargetDensity = 160, là mật độ tài nguyên trong thư mục có thể kéo và không có tỷ lệ trong khi tải sẽ xảy ra. Nếu không, câu trả lời chính xác có thể phụ thuộc vào ý nghĩa của "kích thước phù hợp" ... –

+0

Giá trị mật độ mặc định của các thư mục res có thể vẽ khác nhau được ghi ở đây: http://developer.android.com/guide/practices/screens_support.html –

18

Giải pháp của tôi:

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inScaled = false;    
Bitmap bitmap = BitmapFactory.decodeResource(this.context.getResources(), R.drawable.image, options);