我需要通过非常低带宽的连接(从Android手机(低至10kByte/s))发送图像,并希望以渐进(隔行)模式发送图像,以便另一端的用户在漫长的转移。现在,我正在使用常规的照片应用程序来创建图像:
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
但这会生成渐进式照片,而我却无法发现如何说服它去做其他事情。我探索的第二个选项(读取并重新压缩所拍摄的图像)被挫败了,因为据我所知,Bitmap的compress方法除了格式名称和压缩系数外,不允许任何编码参数:
bitmap.compress(Bitmap.CompressFormat.JPEG, 80, out);
我的首选解决方案是指示照片应用以渐进模式保存。

下一个最佳选择是Java算法,该算法可无损地将存储的jpeg转换为渐进式(jpegtran在Linux上做到了,但它在C语言中并且依赖libjepeg)。

下一个最好的方法是为android指定相关的编码参数,允许我重新压缩它,或者是一个替代的Java库执行相同的操作。

进一步的研究表明,算法已经存在(/system/lib/libjpeg.so),并且在~/android-sdk-linux/source-tree/external/jpeg中包含了源代码-但似乎尚不存在JNI包装器。

最佳答案

您看过这份文件吗?

http://docs.oracle.com/javase/6/docs/api/javax/imageio/plugins/jpeg/JPEGImageWriteParam.html

似乎有写渐进式支持。

另外,您也可以使用通过JNI的OpenJPEG。请参阅http://www.linux-mag.com/id/7697/作为开始。

10-05 21:38