Android的Picture.writeToStream()是否保存了格式?

时间:2011-04-03 16:20:21

标签: android skia

我知道我可以查看来源,但我想知道是否有android.graphics.Picture.writeToStream(OutputStream)使用的格式的任何文档。

2 个答案:

答案 0 :(得分:2)

您可以查看SkPictureRecord.cpp。看起来绘图函数的细节只是通过以下方法线性序列化:

void addScalar(SkScalar scalar) {
    fWriter.writeScalar(scalar);
}

在任何情况下,与SDK的大多数私人详细信息一样,利用这些知识可能会在SDK更改时遇到麻烦。

答案 1 :(得分:2)

我会猜测它与所有这些“skp”文件的格式相同:

http://skia.googlecode.com/svn/skp/

您可以使用skia中包含的Skia调试器打开(如果您可以将其编译!)。

话虽如此,当我尝试为我的测试视图打开writeToStream()的输出时,skia调试器会发生错误。

代码详情

这是Android代码调用的功能。正如您所看到的那样,它是版本化的。该目录中的测试文件是版本9.我的Galaxy S2上Canvas.writeToStream()的输出是版本1.这是java代码调用的地方:

http://code.google.com/p/skia/source/browse/trunk/src/core/SkPicture.cpp#291

但这显然是一种比我手机更新的版本,因为它是版本9:

http://code.google.com/p/skia/source/browse/trunk/include/core/SkPicture.h#161

使用SkPicture的构造函数恢复图片,该构造函数不向后兼容:

http://code.google.com/p/skia/source/browse/trunk/src/core/SkPicture.cpp#269

这有点令人遗憾,并且因为你必须在Android上嗅探PICTURE_VERSION然后做一些时髦的东西来给Android提供正确的版本,因此使用它作为序列化格式非常容易。

修改

PICTURE_VERSION是1,包括ICS,在Jellybean中是2:

https://github.com/android/platform_external_skia/blob/master/include/core/SkUserConfig.h#L44