Я использую webview.capturePicture()
для создания объекта Picture, который содержит все графические объекты для веб-страницы.
Я могу успешно отобразить этот объект Picture в растровое изображение, используя canvas.drawPicture(picture, dst)
без проблем.Однако, когда я использую picture.writeToStream(fos)
для сериализации объекта изображения в файл, а затем Picture.createFromStream(fis)
для чтения данных обратно и создания нового объекта изображения, результирующее растровое изображение припри визуализации, как указано выше, отсутствуют изображения большего размера (что-то более 20 КБ! по наблюдениям).
Это происходит на всех платформах Android OS, которые я тестировал 1.5, 1.6 и 2.1.Глядя на собственный код для Skia
, который является базовой графической библиотекой Android, и выходной файл, полученный из picture.writeToStream()
, я могу видеть, как создается формат файла.Я вижу, что некоторые изображения в этом файле очереди печати Skia не записываются (более крупные), код, который, по-видимому, является проблемой, находится в skBitmap.cpp
в методе
void SkBitmap::flatten(SkFlattenableWriteBuffer& buffer) const;
Записывает растровые значения fWidth, fHeight, fRowBytes, FConfig and isOpaque
значений, а затем просто записывает SERIALIZE_PIXELTYPE_NONE (0).
Это означает, что файл спула не содержит пиксельной информации о реальном изображениии, следовательно, не может правильно восстановить объект изображения.
Фактически это делает API-интерфейсы writeToStream and createFromStream()
бесполезными, поскольку они ненадежно хранят и воссоздают данные изображения.
Имеет кого-либоеще видел такое поведение, и если да, то неправильно ли я использую API, можно ли его обойти, есть ли объяснение, например неполный API / ошибка, и если да, то есть ли планы по исправлению в будущем выпуске Android?
Заранее спасибо.