2012-07-18 108 views
0

我知道這個問題已經在一些地方提到(如here),但是有沒有簡單的方法來讀取WebP圖像,如使用jar文件?閱讀並顯示WebP圖像

即使在較舊的設備上,最大限度地減小應用程序圖像的大小也是非常好的。

是否有可能像使用其他格式一樣讀取WebP inputStream到正常的位圖實例,即使在較舊的Android版本(比ICS更早)上也是如此?

回答

2

你雖提供的例子是相當不錯的,總結它,你需要遵循這樣的步驟:

  • 下載WEBP庫,目前的版本here
  • 在你的Android「JNI」的文件夾,複製創建libwep內容,它
  • 在JNI/Android.mk補充:

    痛飲/ libwebp_java_wrap.c \

    LOCAL_SRC_FILES := \ 和刪除include $(BUILD_STATIC_LIBRARY),而不是把include $(BUILD_SHARED_LIBRARY)

  • 去你的項目目錄,並運行

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

  • ,如果你不知道如何使用NDK,嘗試here

  • 如果編譯successfuly,你獲得libwebp.jar,包括在您的項目構建路徑

  • 在你的活動中,你先放:

    static { System.loadLibrary(「webp」); }

  • 則可以通過InputStream的(即,從資產文件夾)讀.WEBP文件:

    InputStream爲= getAssets()打開( 「image.webp」);

  • 下載Apache庫從here,包括在您的項目構建路徑

  • ,那麼你可以閱讀的InputStream字節數組:

    的byte []編碼= IOUtils.toByteArray(是);

  • 解碼由libwebp文件:

    INT []寬度=新INT [] {0};

    int [] height = new int [] {0};

    byte [] encoded = libwebp.WebPDecodeARGB(編碼,編碼。長寬高);

  • 轉換爲位圖:

    INT []個像素=新INT [decoded.length/4];

    ByteBuffer.wrap(encoded).asIntBuffer()。get(pixels);

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

  • 最後一個行採取的形式here

  • ,與你的位圖任何你想要的。

+0

看起來很酷。不能等待檢查出來。我是否也可以將webP圖像文件放入res/drawable文件夾而不是assets文件夾中? – 2013-06-10 09:36:18

+0

是的,你可以像這樣:Drawable drawable = getResources()。getDrawable(R.drawable.image); BitmapDrawable bD =(BitmapDrawable)可繪製;位圖bitmap = bD.getBitmap(); byte [] encoded = stream.toByteArray();等等... – 2013-06-10 18:55:05

+0

哎呀沒有想到它夠了。抱歉。無論如何,我不知道如何處理其他圖像,但在這裏它需要將整個文件加載到解碼的字節數組中。它是否正確?在其他文件格式上它是一樣的嗎? – 2013-06-10 21:27:01