インテントを使用して電話機のカメラアプリから画像を取得するのは比較的簡単です。インテントの画像はビットマップ形式です。Androidアプリに画像を保存する
これは本当に適切な質問かどうか分かりませんが、ビットマップ全体をそのまま保存するのが一般的ですか?または、ほとんどの人が圧縮/サイズ変更しますか?
インテントを使用して電話機のカメラアプリから画像を取得するのは比較的簡単です。インテントの画像はビットマップ形式です。Androidアプリに画像を保存する
これは本当に適切な質問かどうか分かりませんが、ビットマップ全体をそのまま保存するのが一般的ですか?または、ほとんどの人が圧縮/サイズ変更しますか?
Bitmap.compressを使用して保存する傾向があります。これは圧縮されます。ロスレスフォーマットのPNGを自由に使用してください。再膨張させると品質の低下は起こりません。
もちろん、意図をカメラから取得する場合は、通常はファイルシステムに保存されています。この場合、そのファイルは確実に既に圧縮されています。
これは以下のように簡単な方法です。だから、 `bmp.compress(Bitmap.CompressFormat.PNG、100)のようなもの
private Boolean saveImage(Bitmap bitmap){
ByteArrayOutputStream bao = null;
File file = null, image = null;
Boolean save = false;
try{
bao = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bao);
image = new File(Environment.getExternalStorageDirectory() + "", "/yourSelectedFolder/");
if (!image.exists()) {
if (!image.mkdirs()) {
Toast.makeText(context, "Error: Folder Not Created!\nPlease Try Again.", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(context, "Folder Successfully Created!", Toast.LENGTH_LONG).show();
}
}
file = new File(Environment.getExternalStorageDirectory().toString() + "/yourSelectedFolder/","filename" + ".jpeg");
save = file.createNewFile();
FileOutputStream fos = new FileOutputStream(file);
fos.write(bao.toByteArray());
fos.close();
if (save){
Toast.makeText(context, "Image Successfully Saved", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(context, "Image Not Saved", Toast.LENGTH_LONG).show();
}
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(context, "Error: "+e, Toast.LENGTH_LONG).show();
}
return save;
}
;'どこかでそれを保存する前に? – KaliMa
出力ストリームが必要なようです。通常、私は 'MediaStore.Images.Media.insertImage(contentResolver、bitmap、title、description);'を使ってビットマップをギャラリーに渡します。出力ストリームでこれを行う方法はありますか? – KaliMa
そのMedaStoreの呼び出しを使用すると、実際には画像の縮小バージョン(サムネイル)が作成され、その画像のみがディスクに保存されます。それをさらに縮小する必要はありません。ビットマップの圧縮は、イメージをディスクに保存するときに存在し、Bitmapオブジェクトのビットマップのインメモリ表現は常に圧縮されません。 –