Androidフォンから非常に低帯域幅の接続(10kByte / sまで)で画像を送信する必要があり、プログレッシブ(インターレース)モードで送信して、相手側のユーザーがすでに画像を見始めるようにしたいと考えています。長い転送。現在、通常の写真アプリで画像を作成しています。
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
しかし、これは非プログレッシブな写真を作成し、そうしないように説得する方法を見つけることができませんでした. 私が調べた 2 番目のオプション (撮影した画像を読み取って再圧縮する) は失敗しました。これは、Bitmap の圧縮方法では、フォーマット名と圧縮係数以外のエンコード パラメーターが許可されていないためです。
bitmap.compress(Bitmap.CompressFormat.JPEG, 80, out);
私の好みの解決策は、写真アプリにプログレッシブ モードで保存するように指示することです。
次善の策は、格納された jpeg を無損失でプログレッシブに変換する Java アルゴリズムです (Linux では jpegtran がこれを行いますが、これは C であり、libjepeg に依存しています)。
次善の方法は、関連するエンコーディング パラメータを Android に指定して再圧縮できるようにする方法、または同じことを行う代替 Java ライブラリです。
さらなる調査の結果、アルゴリズムは既に存在し ( /system/lib/libjpeg.so
)、ソースが含まれていることが明らかになりましたが、~/android-sdk-linux/source-tree/external/jpeg
すぐに利用できる JNI ラッパーはないようです。