getNinePatchChunk
うまく動作します。Bitmap
「ソース」ninepatchを指定していたため、nullが返されました。「コンパイルされた」ninepatchイメージが必要です。
Androidの世界には2種類のninepatchファイル形式があります(「ソース」と「コンパイル済み」)。ソースバージョンでは、どこにでも1pxの透明度の境界線を追加します。後でアプリを.apkにコンパイルすると、aaptは*.9.pngファイルをAndroidが期待するバイナリ形式に変換します。これは、pngファイルがその「チャンク」メタデータを取得する場所です。(続きを読む)
さて、今はビジネスに取り掛かっています(DJカンズレを聴いています)。
クライアントコード、次のようなもの:
InputStream stream = .. //whatever
Bitmap bitmap = BitmapFactory.decodeStream(stream);
byte[] chunk = bitmap.getNinePatchChunk();
boolean result = NinePatch.isNinePatchChunk(chunk);
NinePatchDrawable patchy = new NinePatchDrawable(bitmap, chunk, new Rect(), null);
サーバー側では、イメージを準備する必要があります。Android BinaryResourceCompilerを使用できます。これにより、*。9.pngファイルをAndroidネイティブ形式にコンパイルするためだけに、新しいAndroidプロジェクトを作成する手間が省けます。これを手動で行う場合は、基本的にプロジェクトを作成し、いくつかの* .9.pngファイル(「ソース」ファイル)を投入し、すべてを.apk形式にコンパイルし、.apkファイルを解凍してから、*を見つけます。 9.pngファイル、そしてそれはあなたがあなたのクライアントに送るものです。
またBitmapFactory.decodeStream
、これらのpngファイルのnpTcチャンクについて知っているかどうかはわかりません。そのため、画像ストリームが正しく処理されている場合とされていない場合があります。の存在は、その可能性をBitmap.getNinePatchChunk
示唆してBitmapFactory
います-アップストリームコードベースで検索することができます。
npTcチャンクについて認識せず、画像が大幅に台無しになっている場合、私の答えは少し変わります。
byte[]
コンパイルされたninepatchイメージをクライアントに送信する代わりに、コンパイルされたイメージをロードしてチャンクを吐き出すための簡単なAndroidアプリを作成します。次に、このバイト配列を通常のイメージとともにクライアントに送信します。透明な境界線、「ソース」のninepatchイメージ、「コンパイルされた」ninepatchイメージはありません。チャンクを直接使用してオブジェクトを作成できます。
もう1つの方法は、オブジェクトのシリアル化を使用しNinePatch
て、JSONや組み込みのシリアライザーなどを使用して9つのパッチイメージ()をクライアントに送信することです。
編集本当に、本当に独自のチャンクバイト配列を作成する必要がある場合は、、、、およびResourceTypes.cppを確認することdo_9patch
から始めますisNinePatchChunk
。DmitrySkibaの自家製npTcチャンクリーダーもあります。リンクを投稿できないので、誰かが私の答えを編集できれば、それは素晴らしいことです。Res_png_9patch
Res_png_9patch::serialize()
do_9patch:
https ://android.googlesource.com/platform/frameworks/base/+/gingerbread/tools/aapt/Images.cpp
isNinePatchChunk:http ://netmite.com/android/mydroid/1.6/frameworks/base/core/jni/android/graphics/NinePatch.cpp
struct Res_png_9patch:https ://scm.sipfoundry.org/rep/sipX/main/sipXmediaLib/contrib/android/android_2_0_headers/frameworks/base/include/utils/ResourceTypes.h
ドミトリースキバのもの:http ://code.google.com/p/android4me/source/browse/src/android/graphics/Bitmap.java