2

ソースを見ることができることは知っていますが、android.graphics.Picture.writeToStream(OutputStream).

4

2 に答える 2

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_VERSIONICS までは 1 つ、Jellybean では 2 つです。

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

于 2012-12-03T20:34:54.853 に答える
2

SkPictureRecord.cppを確認できます。描画関数の詳細は、次のようなメソッドを介して単純に線形にシリアル化されているようです。

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

いずれにせよ、SDK のほとんどのプライベートな詳細と同様に、この知識を利用すると、SDK が変更されたときに問題が発生する可能性があります。

于 2011-04-03T17:46:57.437 に答える