java picture,java – Picture.writeToStream()没有写出所有位图

我正在使用webview.capturePicture()来创建一个包含网页的所有绘图对象的Picture对象.

我可以使用canvas.drawPicture(picture,dst)成功地将此Picture对象渲染为位图,没有任何问题.

但是当我使用picture.writeToStream(fos)将图片对象序列化为文件时,然后

Picture.createFromStream(fis)将数据读回并创建一个新的图片对象,如上所示渲染的结果位图缺少任何更大的图像(任何超过20KB的东西!通过观察).

这种情况发生在我测试过的所有Android操作系统平台上,1.5,1.6和2.1.

查看Skia的本机代码,它是底层Android图形库和picture.writeToStream()生成的输出文件,我可以看到文件格式是如何构造的.

我可以看到这个Skia假脱机文件中的一些图像没有被写出(较大的那些),看起来问题的代码是在方法中的skBitmap.cpp中

void SkBitmap::flatten(SkFlattenableWriteBuffer& buffer) const;

它写出位图fWidth,fHeight,fRowBytes,FConfig和isOpaque值,但只写出SERIALIZE_PIXELTYPE_NONE(0).这意味着假脱机文件不包含有关实际图像的任何像素信息,因此无法正确恢复图片对象.

实际上,这会使writeToStream和createFromStream()API无法使用,因为它们无法可靠地存储和重新创建图片数据.

有没有其他人看到过这种行为,如果是这样,我是否错误地使用了API,是否可以解决,是否有解释,即不完整的API /错误,如果有的话,是否有计划在未来的Android版本中修复?

提前致谢.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值