2013-06-19 38 views
6

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.

Trả lời

0

Hiển thị đơn giản như được tiếp nhận: Điều này đạt được bằng cách xem xét lớp mạng truyền dẫn (TCP). Mỗi gói nhận được theo thứ tự, được phân phối trong lớp ứng dụng được hiển thị ngay lập tức. Nếu bạn muốn đạt được điều này, thì bạn cần phải suy nghĩ về lập trình socket trong ứng dụng của bạn.

Tuy nhiên, đây là một cách tiếp cận cũ và thực tế là tính toán chuyên sâu hơn. Cá nhân tôi thích, làm việc với một hình ảnh sơ khai. Hình ảnh gốc được hiển thị ngay từ đầu và một chuỗi ngay lập tức với kết nối url và tải xuống (trình quản lý hoặc bộ nhớ cache) được bắt đầu. Sau khi tải xuống hoàn tất, bạn quay lại chủ đề chính của mình để cập nhật ảnh. Điều này có thể tổ chức hơn.

Vui lòng sửa tôi nếu tôi sai về bất kỳ ý nghĩa nào.

+0

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 :) –

0

Thử dự án Freso của Facebook: http://frescolib.org/#streaming Tôi không chắc chắn định dạng tệp hỗ trợ, nhưng nó hỗ trợ hiển thị lũy tiến các ảnh JPEG đã được mã hóa dần dần.

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