我知道這個問題已經在一些地方提到(如here),但是有沒有簡單的方法來讀取WebP圖像,如使用jar文件?閱讀並顯示WebP圖像
即使在較舊的設備上,最大限度地減小應用程序圖像的大小也是非常好的。
是否有可能像使用其他格式一樣讀取WebP inputStream到正常的位圖實例,即使在較舊的Android版本(比ICS更早)上也是如此?
我知道這個問題已經在一些地方提到(如here),但是有沒有簡單的方法來讀取WebP圖像,如使用jar文件?閱讀並顯示WebP圖像
即使在較舊的設備上,最大限度地減小應用程序圖像的大小也是非常好的。
是否有可能像使用其他格式一樣讀取WebP inputStream到正常的位圖實例,即使在較舊的Android版本(比ICS更早)上也是如此?
你雖提供的例子是相當不錯的,總結它,你需要遵循這樣的步驟:
在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
,與你的位圖任何你想要的。
看起來很酷。不能等待檢查出來。我是否也可以將webP圖像文件放入res/drawable文件夾而不是assets文件夾中? – 2013-06-10 09:36:18
是的,你可以像這樣:Drawable drawable = getResources()。getDrawable(R.drawable.image); BitmapDrawable bD =(BitmapDrawable)可繪製;位圖bitmap = bD.getBitmap(); byte [] encoded = stream.toByteArray();等等... – 2013-06-10 18:55:05
哎呀沒有想到它夠了。抱歉。無論如何,我不知道如何處理其他圖像,但在這裏它需要將整個文件加載到解碼的字節數組中。它是否正確?在其他文件格式上它是一樣的嗎? – 2013-06-10 21:27:01