Tôi đang sử dụng webview.capturePicture()
để tạo đối tượng Ảnh chứa tất cả đối tượng bản vẽ cho trang web.Picture.writeToStream() không ghi ra tất cả các bitmap
Tôi có thể hiển thị thành công đối tượng Hình ảnh này vào bitmap bằng cách sử dụng canvas.drawPicture(picture, dst)
mà không gặp vấn đề gì. Tuy nhiên khi tôi sử dụng picture.writeToStream(fos)
để serialize các đối tượng hình ảnh ra tập tin, và sau đó Picture.createFromStream(fis)
để đọc dữ liệu trở lại và tạo ra một đối tượng hình ảnh mới, bitmap kết quả khi trả lại như trên là mất tích bất kỳ hình ảnh lớn hơn (bất cứ điều gì hơn khoảng 20KB! theo quan sát).
Điều này xảy ra trên tất cả nền tảng hệ điều hành Android mà tôi đã thử nghiệm 1,5, 1,6 và 2,1. Xem mã gốc cho Skia
thư viện đồ họa Android cơ bản và tệp đầu ra được tạo từ picture.writeToStream()
Tôi có thể xem cách định dạng tệp được tạo. tôi có thể thấy rằng một số hình ảnh trong file đến máy in Skia này không được viết ra (những cái lớn hơn), mã mà dường như là vấn đề là ở skBitmap.cpp
trong phương pháp
void SkBitmap::flatten(SkFlattenableWriteBuffer& buffer) const;
Nó viết các giá trị bitmap fWidth, fHeight, fRowBytes, FConfig and isOpaque
nhưng sau đó chỉ cần viết ra SERIALIZE_PIXELTYPE_NONE (0).
Điều này có nghĩa là tệp spool không chứa bất kỳ thông tin pixel nào về hình ảnh thực tế và do đó không thể khôi phục đối tượng hình ảnh chính xác.
Điều này có hiệu quả làm cho các API writeToStream and createFromStream()
vô dụng vì chúng không lưu trữ và tạo lại dữ liệu hình ảnh một cách đáng tin cậy.
Có ai khác nhìn thấy hành vi này và nếu tôi sử dụng API không chính xác, có thể làm việc xung quanh không, có giải thích tức là API/lỗi chưa hoàn chỉnh và nếu có kế hoạch sửa lỗi trong bản phát hành sau này Android?
Xin cảm ơn trước.
Tôi có thể xác nhận rằng Ice Cream Sandwich và JellyBean đang hoạt động chính xác, lưu và khôi phục hình ảnh trong đối tượng Picture. –