- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用来自 here 的 libjpeg-turbo使用 JPEG 压缩来压缩图像,因为
Bitmap.compress(Bitmap.CompressFormat.JPEG, 质量, ByteArrayOutputStream);
导致我的 Android 项目中的大图像 OOM。
之前我使用的是来自 here 的 libjpeg-turbo这给我带来了很多麻烦,所以我通过 sorccu 转移到了上面的 Github(我相信这是最新的或者工作正常的库)。
Android Studio - 1.4 RC1Android Ndk-r10eAndroid SDK 最小 = 14,编译 = 22
还有 Benjamin 代码,我尝试使用旧的 Gradle 1.3.0,这导致了很多错误,经过几周的尝试,我更改为 gradle-experimental:0.2.0 并且一切都编译好了。
由于感觉sorccu Github易于集成和使用,所以转向了它。然后使用库中的 turbojpeg-jni.c 以及用于在 android 中集成的 java 代码(都在库中可用)。
我能够使用 ndk-build 进行集成和编译以构建 .so 文件并复制到 lib 文件夹并能够在 java 代码中使用它。
gradle 中的模块名称 = jpegturboandroid.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));
可能是上述 block 中的方法或逻辑可能是错误的,帮帮我!!!
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=all
ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk
最终的 apk 在我的手机 Sony Xperia U ST25i 中也能正常工作,但在模拟器中却不行,它说找不到 .so 文件,我没有检查其他设备
注意: - 我对图书馆作者的看法可能是错误的,但是提到的图书馆创建者都做得很好
我还提到了以下链接,
更新解决了问题 2,通过将 Application.mk 更改为 APP_ABI := 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
此应用程序在模拟器中也能正常运行
最佳答案
在 this question 的帮助下,我终于成功了
感谢发布它的用户。
代码完全符合我的要求,可以压缩图片。
注意:但是压缩大图像(> 5-30 MB)的问题
更新:-
压缩大图像(> 5-30 MB)的问题可以通过将调整尺寸指定为其原始宽度和高度的 1/8(最小值)来解决。
关于java - libjpeg turbo android jpeg 压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32735374/
我的目的是使用 libjpeg-turbo (参见 http://www.libjpeg-turbo.org/Main/HomePage )作为独立 Jpeg Group ( http://www.i
当使用 libjpeg 将图像输入 OpenCL 时,为了能够将 channel 视为具有 CL_UNORM_INT8(在 [0.0, 1.0] 范围内 float )的规范化 uint8,您只能用
在我的 C 程序中,我想使用 libexif 和 libjpeg 在给定路径 inputFilePath,并将生成的 jpeg 保存到输出路径 outputFilePath。 输入的 jpeg 文件很
如标题所示,我使用 AWS EC2 和 AWS linux AMI 来设置运行神经式算法的环境。 Nerual-style 我已经成功安装了 torch、Lua、Loadcaffe、Google Pr
如果可能的话,我想使用 libjpeg 从 JPEG 图像的中间读取一行而不读取前面的所有行。这能做到吗? 最佳答案 答案几乎肯定是“是的,你可以,但它需要比你想要的更多的努力”。 JPEG 图像是标
我想使用 libjpeg 库将图像保存到内存( vector )中。我发现那里有功能: init_destination empty_output_buffer term_destination 我的
我正在使用 libjpeg 解码 jpeg 文件。在解码大图像时,用户可能会切换到另一个 jpeg 文件,那么 libjpeg 是否支持解码中断?非常感谢! 最佳答案 Libjpeg 有一个 I/O
我大部分时间都在使用该示例,它确实创建了一个只是乱码的图像: unsigned char* readJpeg(JNIEnv* env, libraw_processed_image_t *raw) {
我使用来自 Independent JPEG Group 的 jpeg 库 v8d我想改变 jpeg 解压缩读取和处理数据的方式。 在 djpeg main() 中,在每个 jpeg_read_sca
来自 jmorecfg.h : #define PACK_TWO_PIXELS(l,r) ((r>16; \ } while(0) #define WRITE_TWO_ALIGNED
我无法理解我从以下代码中得到的段错误: #include #include #include int main(int argc, char** argv){ FILE*
我正在尝试使用 ijg 的 libjpeg 将 RGB 图像压缩为 JPEG。最后的想法是使用图像传感器拍摄图像并将数据压缩为 ARM Cortex M3 Controller 上的 JPEG;但是,
所以我一直在阅读 libjpeg 文档,它非常乏善可陈。 我一直在尝试弄清楚如何从自定义内存缓冲区而不是文件中读取数据,但我不确定如何测试我的解决方案是否正常工作。 目前我从内存中加载 jpeg 的函
我有下一个基于 libjpeg 的 JPEG 图像解压缩标准代码。 jpeg_decompress_struct cinfo; // ...Set error manager and data sou
我正在尝试使用mingw-w64编译libjpeg(版本8d)。我启动的命令是: MyS.BAT /配置 制作 在第三步,我得到这个错误: $ make D:/Builder/bin/make al
我有这样一个常用的代码: struct jpeg_decompress_struct cinfo; jpeg_create_decompress(&cinfo); jpeg_stdio_src(&ci
我正在尝试使用 libjpeg 将图像从一个文件复制到另一个文件。我尝试使用 jpeg_read_scanlines/jpeg_write_scanlines 来复制图像数据,但据我所知这些函数计算
我已经创建了自己的 DCT 计算。 如何使用 jpeg_write_coefficients 将我的 64 个 DCT 值写入使用 jpeg_write_coefficients 的 JPEG 文件(
libjpeg 是否允许/具有缩放输出图像的例程? 我有一个图像需要在保存和加载时调整大小,在输入上提供 width1、height1 并在输出上获取 width2、height2,我真的不能在外面使
我正在使用 C++ JPEG 库 (libjpeg),我意识到当某些函数失败时会调用 exit() 并关闭应用程序。如何覆盖此行为并防止应用程序因 libjpeg 错误而关闭? 最佳答案 这是 lib
我是一名优秀的程序员,十分优秀!