Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 阅读并显示WebP图像_Android_Jar_Bitmap_Webp - Fatal编程技术网

Android 阅读并显示WebP图像

Android 阅读并显示WebP图像,android,jar,bitmap,webp,Android,Jar,Bitmap,Webp,我知道这个问题已经在一些地方提到过(比如),但是有没有一种简单的方法来读取WebP图像,比如使用jar文件 即使是在较旧的设备上,也最好将应用程序的图像大小最小化 是否可以像使用其他格式一样将WebP inputStream读取到普通位图实例,即使是在较旧的android版本(比ICS更旧)上?您提供的示例非常好,要总结它,您需要遵循以下步骤: 下载webp库,当前版本 在Android“jni”文件夹中创建,将libwep内容复制到其中 在jni/Android.mk中添加: swig/li

我知道这个问题已经在一些地方提到过(比如),但是有没有一种简单的方法来读取WebP图像,比如使用jar文件

即使是在较旧的设备上,也最好将应用程序的图像大小最小化


是否可以像使用其他格式一样将WebP inputStream读取到普通位图实例,即使是在较旧的android版本(比ICS更旧)上?

您提供的示例非常好,要总结它,您需要遵循以下步骤:

  • 下载webp库,当前版本
  • 在Android“jni”文件夹中创建,将libwep内容复制到其中
  • 在jni/Android.mk中添加:

    swig/libwebp_java_wrap.c\

    本地\u SRC\u文件:=\
    并删除
    include$(构建静态库)
    ,将
    include$(构建共享库)

  • 转到项目目录并运行

    /android ndk/ndk构建的路径

  • 如果您不知道如何使用ndk,请尝试

  • 如果编译成功,则获得libwebp.jar,并将其包含在项目构建路径中

  • 在您的活动中,您首先要:

    静止的{ 系统加载库(“webp”); }

  • 然后,您可以通过InputStream读取.webp文件(即从资产文件夹):

    InputStream is=getAssets().open(“image.webp”)

  • 从下载apache库,并将其包含在项目构建路径中

  • 然后可以将InputStream读取到字节数组:

    字节[]编码=IOUtils.toByteArray(is)

  • 通过libwebp解码文件:

    int[]宽度=新的int[]{0}

    int[]高度=新的int[]{0}

    byte[]decoded=libwebp.WebPDecodeARGB(编码、编码、长度、宽度、高度)

  • 转换为位图:

    int[]像素=新int[decoded.length/4]

    ByteBuffer.wrap(已解码).asIntBuffer().get(像素)

    位图bitamp=Bitmap.createBitmap(像素,宽度[0],高度[0],Bitmap.Config.ARGB_8888)

  • 最后一行已形成

  • 用位图做任何你想做的事情


如果您的webp图像存储在资产文件夹中,则使用此代码在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();
        }

看起来很酷。迫不及待地想看看。我还可以将webP图像文件放入res/drawable文件夹而不是assets文件夹吗?是的,您可以这样做:drawable drawable=getResources().getDrawable(R.drawable.image);BitmapDrawable bD=(BitmapDrawable)可绘制;位图位图=bD.getBitmap();,字节[]编码=stream.toByteArray();等等……哎呀,我想得还不够。很抱歉无论如何,我不确定其他图像是如何处理的,但这里需要将整个文件加载到字节数组中进行解码。这是正确的吗?其他文件格式也一样吗?这个问题很老了,在支持WEBP文件之前询问如何处理WEBP文件。