我需要通过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包装器可供使用。
答案 0 :(得分:1)
你看过这个文件吗?
http://docs.oracle.com/javase/6/docs/api/javax/imageio/plugins/jpeg/JPEGImageWriteParam.html
似乎有逐步支持。
或者,您可以使用例如OpenJPEG通过JNI。请参阅http://www.linux-mag.com/id/7697/作为开始。