Tôi đang tải một hình ảnh từ một URL được hiển thị trong một ImageView. Cách thông thường là tạo ra một bitmap như sau (nơi InputStream is
đã được lấy từ URL):Android: Làm cách nào để hiển thị hình ảnh phát trực tiếp lên ImageView mà không tải bitmap hoàn chỉnh?
Bitmap bm = BitmapFactory.decodeStream(is);
Nhưng tôi đang đối phó với hình ảnh lớn, và tôi muốn bắt đầu hiển thị pixel trước khi toàn bộ hình ảnh là nạp vào bitmap tức là tôi muốn đạt được kết xuất tiến bộ của hình ảnh (tương tự như tải các hình ảnh lớn trong trình duyệt web). Ví dụ: nếu hình ảnh là một PNG đan xen, điều này sẽ cho phép tôi hiển thị hình ảnh chất lượng thấp hơn cho người dùng trong khi họ chờ hình ảnh đầy đủ tải. Về cơ bản, tôi muốn đạt được kết xuất như được hiển thị trong http://www.codinghorror.com/blog/2005/12/progressive-image-rendering.html
Tôi biết nếu tôi có thể triển khai bộ giải mã PNG hay sử dụng triển khai mã nguồn mở, tôi có thể sửa đổi để hiển thị pixel tới bitmap của ImageView ngay khi tôi đọc chúng nhưng trông giống như một nỗ lực khổng lồ cho những gì tôi có ý định.
Vấn đề chính với cách tiếp cận đầu tiên của bạn là dữ liệu hình ảnh không có pixel thẳng, mà thay vào đó nó được nén và sắp xếp theo định dạng hình ảnh tôi sử dụng (ví dụ: PNG). Ngay cả khi tôi đối phó với các gói riêng lẻ, nỗ lực chính sẽ là chuyển đổi dữ liệu đó thành các giá trị màu pixel trước khi hiển thị, số tiền ghi một bộ giải mã cho định dạng hình ảnh đã nói (đây sẽ là quá mức cần thiết). Tôi đã tìm kiếm một phương pháp/thư viện hiện có mà sẽ đơn giản hơn. Cách tiếp cận thứ hai của bạn, tất nhiên, là cách dễ dàng hơn. Tôi đã giữ nó như là tùy chọn sao lưu của tôi nếu không có gì khác hoạt động :) –