[英]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.