[英]libjpeg turbo android jpeg compression
我從這里開始使用libjpeg-turbo來使用JPEG壓縮來壓縮圖像,因為
Bitmap.compress(Bitmap.CompressFormat.JPEG,quality,ByteArrayOutputStream);
導致我的Android項目中的大圖片出現OOM。
以前我從這里使用libjpeg-turbo,這給我帶來了很多麻煩,所以我通過sorccu轉到了上述Github(我相信這是最新的或可以正常使用的庫)。
Android Studio-1.4 RC1 Android Ndk-r10e Android SDK分鍾= 14,已編譯= 22
同樣使用本傑明代碼,我嘗試使用舊的Gradle 1.3.0,這導致了很多錯誤,經過數周的嘗試,我更改為gradle-experimental:0.2.0 ,所有內容均編譯良好。
由於我覺得sorccu Github易於集成和使用,因此轉向了它。 然后在庫中使用了turbojpeg-jni.c以及用於在android中集成的Java代碼(均可在庫中使用)。
我能夠使用ndk-build進行集成和編譯,以構建.so文件並復制到lib文件夾,並能夠在Java代碼中使用它。
gradle中的模塊名稱= jpegturbo android.mk中的模塊名稱= jpegturbo
將其構建為共享庫
Java中的庫加載代碼= System.loadLibrary(“ jpegturbo”); (org.libjpegturbo.turbojpeg.TJLoader.java)
我現在遇到的問題很少,請幫助我解決它,
1.主要問題我無法使用它來壓縮圖像,壓縮圖像損壞可能是做錯了,下面是java代碼
static {
try {
tj = new TJCompressor();
} catch (Exception e) {
e.printStackTrace();
}
}
File file = new File(pathName);
int actualBytes = (int) file.length();
byte[] srcBuf = new byte[actualBytes];
byte[] dstBuf;
FileInputStream fIn;
try {
fIn = new FileInputStream(file);
fIn.read(srcBuf);
fIn.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
tj.setSourceImage(srcBuf, 0, 0, options.outWidth, 0, options.outHeight, TJ.PF_RGB);
tj.setJPEGQuality(quality);
tj.setSubsamp(TJ.SAMP_444);
dstBuf = tj.compress(TJ.FLAG_ACCURATEDCT, options.outWidth, options.outHeight);
int size = tj.getCompressedSize();
tj.close();
FileOutputStream fos;
try {
fos = new FileOutputStream(file1);
fos.write(dstBuf);
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}catch (OutOfMemoryError e) {
e.printStackTrace();
}
Log.e("SIZE ", String.valueOf(size));
可能是以上代碼塊中的方法或邏輯可能是錯誤的,請幫助我!
APP_ABI:= armeabi armeabi-v7a armeabi-v7a-hard arm64-v8a x86 x86_64
我使用下面的命令來構建.so文件
ndk-build NDK_PROJECT_PATH =。 APP_BUILD_SCRIPT =。/ Android.mk APP_ABI = armeabi-v7a LOCAL_ARM_NEON = true ARCH_ARM_HAVE_NEON = true
它僅為ABI armeabi-v7a生成.so文件,我為其他ABI手動復制了.so文件。 我什至嘗試下面的命令,但沒有幫助
ndk-build NDK_PROJECT_PATH =。 APP_BUILD_SCRIPT =。/ Android.mk APP_ABI =全部
ndk-build NDK_PROJECT_PATH =。 APP_BUILD_SCRIPT =。/ Android.mk
最終的apk也可以在我的移動版Sony Xperia U ST25i中使用,但是在模擬器中卻無法顯示。so文件無法找到,我沒有在其他設備中簽入
注意:-我對圖書館作者可能是錯的,但上述提到的圖書館作者都做得很好
我還提到了以下鏈接,
更新通過將Application.mk更改為APP_ABI解決了問題2:= armeabi-v7a armeabi-v7a-hard x86 x86_64 arm64-v8a APP_PLATFORM:= android-14
這是我的ndk-build命令ndk-build NDK_PROJECT_PATH =。 APP_BUILD_SCRIPT =。/ Android.mk NDK_APPLICATION_MK =。/ Application.mk
這個應用程序在模擬器中也可以正常工作后
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.