Tôi cần gửi hình ảnh qua kết nối băng thông thấp rất từ điện thoại Android (xuống tới 10kByte/s) và muốn gửi chúng ở chế độ liên tục (xen kẽ) rằng người dùng ở đầu bên kia bắt đầu thấy hình ảnh đã có trong quá trình truyền kéo dài. Ngay bây giờ, tôi đang tạo ra những hình ảnh với các ứng dụng hình ảnh thường xuyên:Cách tạo hình ảnh JPEG lũy tiến trên Android
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Nhưng điều này tạo ra phi tiến ảnh và tôi đã không thể phát hiện ra làm thế nào để thuyết phục nó để làm ngược lại. Lựa chọn thứ hai tôi khám phá (đọc và tái nén hình ảnh chụp) đã thất bại bởi vì phương pháp nén của Bitmap không cho phép bất kỳ thông số mã hóa bên cạnh tên định dạng và yếu tố nén như xa như tôi có thể xác định:
bitmap.compress(Bitmap.CompressFormat.JPEG, 80, out);
Giải pháp ưa thích của tôi là hướng dẫn ứng dụng ảnh lưu ở chế độ tiến bộ.
Tùy chọn tốt nhất tiếp theo sẽ là một thuật toán Java không chuyển đổi jpeg được lưu trữ thành lũy tiến (jpegtran thực hiện điều này trên Linux, nhưng nó nằm trong C và dựa trên libjepeg).
Tốt nhất tiếp theo sẽ là phương pháp để chỉ định các thông số mã hóa có liên quan cho android cho phép tôi nén lại hoặc thư viện Java thay thế thực hiện tương tự.
Nghiên cứu sâu hơn cho thấy các thuật toán đã có (/system/lib/libjpeg.so
) với các nguồn trong ~/android-sdk-linux/source-tree/external/jpeg
- nhưng dường như không có trình bao bọc JNI sẵn có.
Chỉ cần lưu ý: "tiến bộ" là chính xác những gì bạn nhận được: từ trên xuống dưới. Những gì bạn đang tìm kiếm được gọi là "xen kẽ". Định dạng đầu ra JPEG không hỗ trợ xen kẽ. PNG có, vì vậy bạn cần xem xét việc tạo hình ảnh PNG đan xen. –
@AleksG Xin lỗi, nhưng tôi không đồng ý. Vui lòng xem phần [wikipedia] (https://en.wikipedia.org/wiki/JPEG) 'JPEG compression'. Như tôi đã đề cập trong câu hỏi, định dạng này dễ tạo trên 'Linux' bằng cách sử dụng jpegtran. – Ivin