0

この質問はすでにいくつかの場所で言及されていることは知っていますが (ここなど)、jar ファイルを使用するなど、WebP 画像を簡単に読み取る方法はありますか?

古いデバイスでもアプリの画像のサイズを最小限に抑えることができれば素晴らしいことです。

古いAndroidバージョン(ICSより古い)でも、他のフォーマットで行うように、WebP inputStreamを通常のビットマップインスタンスに読み取ることは可能ですか?

4

2 に答える 2

1

あなたが提供した例は非常に優れています。要約すると、次の手順に従う必要があります。

  • webp ライブラリの現在のバージョンはこちらからダウンロードしてください
  • Androidの「jni」フォルダーに作成し、libwepコンテンツをそこにコピーします
  • jni/Android.mk に次を追加します。

    swig/libwebp_java_wrap.c \

    toLOCAL_SRC_FILES := \ と remove include $(BUILD_STATIC_LIBRARY)、代わりに置くinclude $(BUILD_SHARED_LIBRARY)

  • プロジェクトディレクトリに移動して実行します

    ./path-to-android-ndk/ndk-build

  • ndk の使い方がわからない場合は、こちらをお試しください

  • コンパイルに成功すると、libwebp.jar が取得され、プロジェクトのビルド パスに含められます。

  • あなたの活動では、最初に次のものを入れます:

    static { System.loadLibrary("webp"); }

  • その後、InputStream で (つまり、assets フォルダーから) .webp ファイルを読み取ることができます。

    InputStream は = getAssets().open("image.webp");

  • hereからApacheライブラリをダウンロードし、プロジェクトのビルドパスに含めます

  • 次に、InputStream をバイト配列に読み取ることができます。

    byte[] エンコード = IOUtils.toByteArray(is);

  • libwebp でファイルをデコードします。

    int[] 幅 = 新しい int[] { 0 };

    int[] 高さ = 新しい int[] { 0 };

    バイト[] デコード = libwebp.WebPDecodeARGB(エンコードされた、エンコードされた.長さ、幅、高さ);

  • ビットマップに変換:

    int[] ピクセル = 新しい int[decoded.length / 4];

    ByteBuffer.wrap(decoded).asIntBuffer().get(ピクセル);

    Bitmap bitamp = Bitmap.createBitmap(pixels, width[0], height[0], Bitmap.Config.ARGB_8888);

  • 最後の行はここで形成されます

  • あなたが望むものは何でもあなたのビットマップでやってください。

于 2013-06-10T07:24:16.963 に答える
1

webp 画像が assets フォルダーに保存されている場合は、このコードを使用して読み取り、imageView に表示します

try {
            InputStream inputStream = context.getAssets().open("yourfilename.webp");
            BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
            Bitmap bmp = BitmapFactory.decodeStream(bufferedInputStream);
            imageView.setImageBitmap(bmp);
           
        } catch (IOException e) {
            e.printStackTrace();
        }
于 2020-09-07T03:56:55.760 に答える