正在使用的libjpeg渦輪從here壓縮使用JPEG壓縮的圖像,因爲的libjpeg渦輪機器人JPEG壓縮
Bitmap.compress(Bitmap.CompressFormat.JPEG,質量,ByteArrayOutputStream);
在我的Android項目中導致大圖像的OOM。
以前我使用libjpeg-turbo從here,這導致了我很多麻煩,所以我轉移到sorccu上面的Github(我相信這是最新的或工作良好的庫)。
Android的工作室 - 1.4 RC1 的Android NDK - r10e Android SDK中分鐘= 14,編譯= 22
還與本傑明代碼與老搖籃1.3.0我試圖造成不少誤區,幾個星期後,嘗試我更改爲gradle-experimental:0.2.0和一切編譯良好。
因爲我覺得sorccu Github易於集成和使用,轉向它。然後在庫中使用turbojpeg-jni.c以及用於在android中集成的java代碼(兩者均可在庫中使用)。
我能夠使用ndk-build進行集成和編譯來構建.so文件並將其複製到lib文件夾並且能夠在java代碼中使用它。在Java中android.mk = jpegturbo
的gradle中
模塊名稱= jpegturbo 模塊名稱內置它作爲共享庫
庫加載代碼=的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));
可能是在上述區塊的方法或邏輯可能是錯的,幫幫我!
- 我沒有改變從github查看application.mk,
APP_ABI:= armeabi armeabi-V7A armeabi-V7A硬arm64-V8A 86 x86_64的
我用下面的命令來構建.so文件
NDK建造NDK_PROJECT_PATH =。 APP_BUILD_SCRIPT =/Android.mk APP_ABI = armeabi-V7A LOCAL_ARM_NEON =真ARCH_ARM_HAVE_NEON =真
它生成ABI armeabi-V7A .so文件獨自一人,我手動複製其他ABI的the.so文件。我甚至試過下面的命令,但它不幫助
ndk-build NDK_PROJECT_PATH =。 APP_BUILD_SCRIPT = /機器人。mk APP_ABI =全部
ndk-build NDK_PROJECT_PATH =。 APP_BUILD_SCRIPT =/Android.mk
而且最終的apk的作品在我的手機索尼XPERIAüST25i,但不是在模擬器它說的.so文件無法找到,我沒有在其他設備中
檢查注: - 我可能是錯的庫的作者,但提到庫創建者都已經做了很多工作
我還提到了以下鏈接,
更新 解決問題2,通過改變Application.mk爲 APP_ABI:= armeabi-V7A armeabi-V7A硬86 x86_64的arm64-V8A APP_PLATFORM:= android- 14
這裏是我的NDK-build命令 NDK建造NDK_PROJECT_PATH =。 APP_BUILD_SCRIPT =/Android.mk NDK_APPLICATION_MK =/Application.mk
這個程序後工作在模擬器也沒關係
嗨Balamurugan,只是一個簡單的問題。我遇到了Android的默認jpeg壓縮問題,它會創建工件,請參閱此問題以獲取更多詳細信息:http://stackoverflow.com/questions/36487971/how-to-compress-bitmap-as-jpeg-with-least -quality-loss-on-android我想問問libjpeg-turbo是否能夠解決這個問題? –
那麼這個問題需要更深入挖掘Bitmap.compress,我沒有那麼多的曝光,更好的你可以試試libjpeg-turbo,記得libjpeg-turbo不是libjpeg的精確副本,它有它的自己定製。 – Balamurugan