【发布时间】:2012-06-11 08:52:27
【问题描述】:
我需要通过 非常 低带宽连接从 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 包装器可用。
【问题讨论】:
-
请注意:“渐进式”正是您所得到的:从上到下。您正在寻找的内容称为“隔行扫描”。 JPEG 输出格式不支持隔行扫描。 PNG 可以,因此您需要考虑创建隔行扫描的 PNG 图像。
-
@AleksG 对不起,但我不同意。请查看wikipedia 部分“JPEG 压缩”。正如我在问题中提到的,这种格式很容易使用 jpegtran 在“Linux”上创建。
-
目前在 Android 中编码渐进式 JPEG 的情况如何?