android JNI解码内存中的JPEG图片
2014-12-31 09:48
260 查看
最近在android上使用cv做一些简单的图像处理,摄像头拍摄的照片是JPEG格式的,cv处理时会解码成bmp。3个选择:
1、图片保存在sdcard上,JNI再去读取文件。 最后的万不得以到办法。
2、图片在java层解码,再通过JNI传输给C++。图片分辨率为3264x2448,解出来的bmp图片大小为32M,放弃。
3、JNI传输jpeg buffer 给C++。 jpeg buffer只有2M左右,但是需要解决 解码内存jpeg图片的问题。
通过jni传下来的jpeg buffer,libjpeg竟然不支持,jpeg只支持文件系统上的文件输入。网上有人说turbo-jpeg可以, 编译链接以后,在手机上运行崩溃,找不到原因。
偶然间在在cv的头文件上看到 imdecode这个函数:
CV_EXPORTS_W Mat imdecode(InputArray buf,int flags);
遇到一个问题:
输入是 InputArray类型的,而存放JPEG数据的却是c++指针。
度娘告诉我,Mat继承自InputArray,把jpeg数据传给Mat,然后调用imdecode对解码Mat进行解码。
完整代码如下:
jint length = env->GetArrayLength(byteArray); //取得jni buffer size。
cv::Mat standimg1 = Mat(length,1,CV_8UC1); Mat 分配空间
env->GetByteArrayRegion(byteArray,0,len,(jbyte *)(standimg1.data)); //Mat。data 即Mat存放数据的地址。
Mat standimg = imdecode( standimg1, CV_LOAD_IMAGE_COLOR); 解码
if(standimg.empty()){
LOGD("read image err. \n");
return -1;
}
LOGFI("%d %d ",standimg.rows,standimg.cols);
1、图片保存在sdcard上,JNI再去读取文件。 最后的万不得以到办法。
2、图片在java层解码,再通过JNI传输给C++。图片分辨率为3264x2448,解出来的bmp图片大小为32M,放弃。
3、JNI传输jpeg buffer 给C++。 jpeg buffer只有2M左右,但是需要解决 解码内存jpeg图片的问题。
通过jni传下来的jpeg buffer,libjpeg竟然不支持,jpeg只支持文件系统上的文件输入。网上有人说turbo-jpeg可以, 编译链接以后,在手机上运行崩溃,找不到原因。
偶然间在在cv的头文件上看到 imdecode这个函数:
CV_EXPORTS_W Mat imdecode(InputArray buf,int flags);
遇到一个问题:
输入是 InputArray类型的,而存放JPEG数据的却是c++指针。
度娘告诉我,Mat继承自InputArray,把jpeg数据传给Mat,然后调用imdecode对解码Mat进行解码。
完整代码如下:
jint length = env->GetArrayLength(byteArray); //取得jni buffer size。
cv::Mat standimg1 = Mat(length,1,CV_8UC1); Mat 分配空间
env->GetByteArrayRegion(byteArray,0,len,(jbyte *)(standimg1.data)); //Mat。data 即Mat存放数据的地址。
Mat standimg = imdecode( standimg1, CV_LOAD_IMAGE_COLOR); 解码
if(standimg.empty()){
LOGD("read image err. \n");
return -1;
}
LOGFI("%d %d ",standimg.rows,standimg.cols);
相关文章推荐
- 关于JPG图片之JPEG编解码过程详解
- Android平台上使用skia库进行jpeg图片解码
- 嵌入式 linux 移植修改后的libjpeg 实现内存中解码
- 使用openCV对JPEG图像内存进行解码及时间过长问题;
- Nodejs跨平台轻量级图片编解码库【增加Jpeg质量调整】
- 使用TCPMP解码显示JPEG图片WINCE5.0
- 图像解码之一——使用libjpeg解码jpeg图片
- FW:使用libjpeg解码jpeg图片
- FW:使用libjpeg解码jpeg图片
- VC++使用CImage在内存中Jpeg转换Bmp图片
- 不修改源代码实现Libjpeg内存编解码jpeg
- 图像解码之一:使用libjpeg解码jpeg图片
- 使用mapgis6.7进行工程输出为JPEG图片,弹出内存不足或者内存警告问题的解决方案
- Nodejs跨平台轻量级图片编解码库【增加Jpeg质量调整】
- 图像解码之一——使用libjpeg解码jpeg图片
- 转载:libjpeg解码内存jpeg数据
- 图像解码之一——使用libjpeg解码jpeg图片
- 图像解码之一——使用libjpeg解码jpeg图片
- Android 获得图片并解码成缩略图以减少内存消耗
- VC++使用CImage在内存中Bmp转换Jpeg图片