我知道我可以查看源代码,但我想知道是否有任何关于android.graphics.Picture.writeToStream(OutputStream)
.
2 回答
您可以查看SkPictureRecord.cpp。看起来绘图函数的细节通过以下方法简单地线性序列化:
void addScalar(SkScalar scalar) {
fWriter.writeScalar(scalar);
}
无论如何,与 SDK 的大多数私人细节一样,当 SDK 发生变化时,利用这些知识可能会给您带来麻烦。
我猜它与这里所有这些“skp”文件的格式相同:
http://skia.googlecode.com/svn/skp/
您可以使用 skia 中包含的 Skia 调试器打开它(如果您可以编译它!)。
writeToStream()
话虽如此,当我尝试为我的测试视图打开输出时,skia 调试器出现了段错误。
代码详情
这是 Android 代码调用的函数。如您所见,它是版本化的。该目录中的测试文件是版本 9。Canvas.writeToStream()
我的 Galaxy S2 上的输出是版本 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
这有点令人遗憾,并且作为序列化格式使用起来非常麻烦,因为您必须PICTURE_VERSION
在 Android 上嗅探,然后做一些时髦的事情来为 Android 提供正确的版本。
编辑
在PICTURE_VERSION
ICS 之前是 1,包括 ICS,在 Jellybean 是 2:
https://github.com/android/platform_external_skia/blob/master/include/core/SkUserConfig.h#L44