我知道这个问题已经在某些地方(比如这里)提到过,但是有没有一种简单的方法来读取 WebP 图像,比如使用 jar 文件?
即使在旧设备上最小化应用程序的图像大小也会很棒。
是否可以像使用其他格式一样将 WebP inputStream 读取到普通位图实例,即使在较旧的 android 版本(比 ICS 旧)上也是如此?
您提供的示例非常好,总结一下,您需要遵循以下步骤:
在 jni/Android.mk 添加:
痛饮/libwebp_java_wrap.c \
toLOCAL_SRC_FILES := \
和 remove include $(BUILD_STATIC_LIBRARY)
, put 代替include $(BUILD_SHARED_LIBRARY)
转到您的项目目录并运行
./path-to-android-ndk/ndk-build
如果您不知道如何使用 ndk,请尝试这里
如果编译成功,您将获得 libwebp.jar,将其包含在您的项目构建路径中
在您的活动中,您首先提出:
静态 { System.loadLibrary("webp"); }
然后您可以通过 InputStream 读取 .webp 文件(即从 assets 文件夹中):
InputStream is = getAssets().open("image.webp");
从这里下载 apache 库,将其包含在您的项目构建路径中
然后您可以将 InputStream 读取到字节数组:
byte[] 编码 = IOUtils.toByteArray(is);
通过 libwebp 解码文件:
整数 [] 宽度 = 新整数 [] { 0 };
整数 [] 高度 = 新整数 [] { 0 };
byte[] decoded = libwebp.WebPDecodeARGB(encoded, encoded.length, width, height);
转换为位图:
int[] 像素 = 新 int[decoded.length / 4];
ByteBuffer.wrap(decoded).asIntBuffer().get(pixels);
位图bitamp = Bitmap.createBitmap(像素,宽度[0],高度[0],Bitmap.Config.ARGB_8888);
最后几行在这里形成
随心所欲地处理您的位图。
如果您的 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();
}