ソースを見ることができることは知っていますが、android.graphics.Picture.writeToStream(OutputStream)
.
2 に答える
ここにあるこれらすべての「skp」ファイルの形式と同じだと思います。
http://skia.googlecode.com/svn/skp/
これは、skia に含まれている Skia Debugger で開くことができます (コンパイルできる場合)。
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
これは少し残念であり、シリアル化形式として使用するのは非常にハックになります。なぜなら、Android で をスニッフィングしてPICTURE_VERSION
から、Android に適切なバージョンを提供するためにファンキーなことをする必要があるからです。
編集
PICTURE_VERSION
ICS までは 1 つ、Jellybean では 2 つです。
https://github.com/android/platform_external_skia/blob/master/include/core/SkUserConfig.h#L44
SkPictureRecord.cppを確認できます。描画関数の詳細は、次のようなメソッドを介して単純に線形にシリアル化されているようです。
void addScalar(SkScalar scalar) {
fWriter.writeScalar(scalar);
}
いずれにせよ、SDK のほとんどのプライベートな詳細と同様に、この知識を利用すると、SDK が変更されたときに問題が発生する可能性があります。