2012-02-20 23 views
17

Tôi muốn giải mã hình ảnh từ thẻ SD bằng BitmapFactory.decodeFile (đường dẫn, tùy chọn).
Tôi cũng muốn hình ảnh lớn hơn 2048x2048 pixel được chia tỷ lệ xuống tối đa 2048x2048 (duy trì tỷ lệ).
Tôi có thể thực hiện việc này theo cách thủ công sau khi nhận bitmap, nhưng điều đó sẽ yêu cầu phân bổ một lượng lớn byte ngoài những byte đã được phân bổ.
Tôi nên thiết lập đối tượng BitmapFactory.Options của mình để nhận được hiệu ứng đó như thế nào?
Cảm ơnAndroid cách chia tỷ lệ hình ảnh với Tùy chọn BitmapFactory

Trả lời

10

Sử dụng BitmapFactory.Options.inSampleSize khi bạn tải hình ảnh của mình lần đầu tiên để có kích thước gần nhất có thể với kích thước mục tiêu, sau đó sử dụng Bitmap.createScaledBitmap để chia tỷ lệ với kích thước chính xác bạn muốn.

Có một số mã cho số này trong this answer.

3

Bạn có thể thử một cái gì đó như thế này:

int imageWidth, imageHeight; 

Bitmap result = Bitmap.createScaledBitmap(bitmapPicture, 
         imageWidth, imageHeight, false); 

Ở đây bạn có thể thêm chiều rộng và chiều cao của riêng bạn. bitmapPicture là đối tượng của Bitmap. Hãy cho tôi biết nếu điều này có bất kỳ trợ giúp nào cho bạn.

+1

Như tôi đã nói, tôi đang cố gắng tránh phải phân bổ 2048x2048 pixel khác, nhưng có BitmapFactory thực hiện việc này tự động vì tôi rất thiếu bộ nhớ. Phương pháp của bạn chỉ phân bổ một bitmap mới mà không phải là những gì tôi muốn. Cảm ơn vì lời đáp sâu sắc. – saarraz1

5

Bắt đầu bằng cách đặt inJustDecodeBounds thành true trong Options, điều này sẽ cung cấp cho bạn kích thước của hình ảnh mà không tải bất kỳ dữ liệu hình ảnh nào.
Nếu kích thước hình ảnh nhỏ hơn kích thước tối đa của bạn, thì chỉ cần tải nó như bình thường.
Nếu mặt khác, nó quá lớn, hãy sử dụng inSampleSize để đọc bitmap nhỏ hơn.

Lưu ý: Tôi không nghĩ rằng quá trình giải mã sẽ lọc khi sử dụng inSampleSize, vì vậy bạn có thể mất một số chi tiết, nhưng kích thước hình ảnh của bạn quá lớn (2048 px). gây ra bất kỳ vấn đề nào.

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