2011-09-01 32 views
9

Tôi có một câu hỏi đơn giản: Tôi có nên thay đổi kích thước một bitmap lớn hơn trước khi thêm vào ImageView hoặc để ImageView thay đổi kích thước của Bitmap không? Cách phù hợp, liên quan đến hiệu suất là gì?Tôi có nên thay đổi kích thước bitmap trước khi thêm vào một ImageView hoặc để ImageView thay đổi kích thước của Bitmap không?

Cảm ơn

+0

Bạn đang nhân rộng đến một kích thước điểm ảnh cố định (nghĩa là ,. px), hoặc một mật độ/quy mô độc lập (ví dụ: dp/sp) kích thước? –

+0

Để nhúng. Tôi đã quên nói rằng Bitmap chỉ lớn hơn một chút so với chiều cao/chiều rộng của ImageViews, khoảng 10%. – Benjamin

+0

Nếu nó chỉ lớn hơn một chút, chỉ cần sử dụng 'setScaleType'. Nếu nó lớn hơn, tôi khuyên bạn nên giảm tỷ lệ trong/sau khi tải và loại bỏ bản gốc. – Dave

Trả lời

11

Xem xét sử dụng quy mô cho ImageView, và đừng bận tâm về thay đổi kích thước. Bạn có thể chia tỷ lệ hình ảnh như thế này, ví dụ:

image.setAdjustViewBounds(true); 
image.setMaxHeight(50); 
image.setMaxWidth(50); 
image.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 
+0

Nếu hình ảnh là 1000 x 1000 và bạn muốn 50x50, đây thực sự là cách tốt nhất? Có vẻ không hiệu quả với tôi. – Ricky

+0

cũng nếu bạn cắt hình ảnh hoặc thay đổi kích thước nó, bạn có thể mất chất lượng của nó để mở rộng quy mô là cách tốt nhất để làm điều đó và giữ chất lượng cao. – Arkde

1

Ảnh lớn hơn, kích thước lớn hơn, tôi không nghĩ hiệu suất sẽ bị ảnh hưởng mà vẫn giữ mọi thứ hiệu quả.

Bạn cũng có thể đặt hình ảnh kích thước khác nhau trong các thư mục khác nhau cho độ phân giải khác nhau:

res/drawable-mdpi/my_icon.png  // bitmap for medium density 
res/drawable-hdpi/my_icon.png  // bitmap for high density 
res/drawable-xhdpi/my_icon.png  // bitmap for extra high density 

Supporting different size screens

1

chúng tôi có thể thay đổi kích thước bitmap hiện tại thành bất kỳ kích thước nào bằng bitmap.createScaledBitmap sử dụng mã bên dưới.

bmp=Bitmap.createScaledBitmap(bmp,destBitmapWith, destBitmapHeight,true); 
+0

Chính xác những gì tôi đang tìm kiếm khi BitmapFactory trả về các bitmap không thể thay đổi. –

1

Bạn có thể làm như thế này:

ImageView imageView = (ImageView) findViewById(R.id.imageView); 
     imageView.setAdjustViewBounds(true); 
     imageView.setMaxHeight(imageView.getHeight()); 
     imageView.setMaxWidth(imageView.getWidth()); 
     imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 
     imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath)); 
Các vấn đề liên quan