2012-07-12 38 views
13

Tôi có hình ảnh 2448x3264 trên thẻ SD tiêu thụ 1.667.072 byte nhưng khi tôi tải nó dưới dạng Bitmap và tính kích thước của nó bằng cách sử dụng getRowBytes()*getHeight() Tôi kết thúc với 15.980,544 byte.Tại sao kích thước Bitmap lớn hơn trong bộ nhớ so với trên đĩa trong Android?

Tại sao điều này xảy ra và làm cách nào tôi có thể tính toán kích thước thực của tệp?

+0

Định dạng của hình ảnh này là gì? Định dạng –

+0

là jpeg. Tôi nghĩ Devunwired đã trả lời nó – Saqib

Trả lời

37

Đó là do hình ảnh được nén khi hình ảnh trên đĩa (được lưu trữ ở định dạng JPG, PNG hoặc tương tự). Khi bạn tải hình ảnh vào bộ nhớ, nó sẽ không còn được nén và chiếm nhiều bộ nhớ cần thiết cho tất cả các pixel (thường là chiều rộng * chiều cao * 4 cho RGBA_8888 hoặc chiều rộng * chiều cao * 2 cho RGB_565).

+0

ok, tôi hiểu ngay bây giờ. Chỉ cần xác nhận nếu tôi nén bitmap bằng bitmap.compress (định dạng Bitmap.CompressFormat, chất lượng int) thành FileOutputStream và đọc bitmap một lần nữa ngay cả khi nó sẽ cho kích thước lớn. Đúng? – Saqib

+1

Đúng, hình ảnh nén chỉ là định dạng lưu trữ tệp. Để thực sự làm việc với dữ liệu, nó phải được tăng trở lại vào một Bitmap đầy đủ trong bộ nhớ. – Devunwired

+0

Tôi có một 1024 * 600 img được đọc vào mem trên Android. Calcs của tôi nói 1024 * 600 * 4 = ~ 3 MB trong khi DDMS đang nói cho tôi 4,2 MB của nó trong mem, bất kỳ ý tưởng những gì gây ra thêm chi phí? – Dori

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