Je comprends que l'utilisation de BitmapFactory
peut convertir un fichier en bitmap, mais existe-t-il un moyen de convertir une image bitmap en fichier ?
Réponses
Trop de publicités?J'espère que ça t'aidera :
//create a file to write bitmap data
File f = new File(context.getCacheDir(), filename);
f.createNewFile();
//Convert bitmap to byte array
Bitmap bitmap = your bitmap;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.PNG, 0 /*ignored for PNG*/, bos);
byte[] bitmapdata = bos.toByteArray();
//write the bytes in file
FileOutputStream fos = new FileOutputStream(f);
fos.write(bitmapdata);
fos.flush();
fos.close();
La conversion de Bitmap
en File
doit être effectuée en arrière-plan (PAS DANS LE FIL PRINCIPAL) cela bloque l'interface utilisateur spécialement si le bitmap
était volumineux
File file;
public class fileFromBitmap extends AsyncTask<Void, Integer, String> {
Context context;
Bitmap bitmap;
String path_external = Environment.getExternalStorageDirectory() + File.separator + "temporary_file.jpg";
public fileFromBitmap(Bitmap bitmap, Context context) {
this.bitmap = bitmap;
this.context= context;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
// before executing doInBackground
// update your UI
// exp; make progressbar visible
}
@Override
protected String doInBackground(Void... params) {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
file = new File(Environment.getExternalStorageDirectory() + File.separator + "temporary_file.jpg");
try {
FileOutputStream fo = new FileOutputStream(file);
fo.write(bytes.toByteArray());
fo.flush();
fo.close();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
// back to main thread after finishing doInBackground
// update your UI or take action after
// exp; make progressbar gone
sendFile(file);
}
}
L'appeler
new fileFromBitmap(my_bitmap, getApplicationContext()).execute();
vous DEVEZ utiliser le file
dans onPostExecute
.
Pour changer le répertoire de file
à stocker dans le cache
remplacer la ligne :
file = new File(Environment.getExternalStorageDirectory() + File.separator + "temporary_file.jpg");
avec :
file = new File(context.getCacheDir(), "temporary_file.jpg");
La plupart des réponses sont trop longues ou trop courtes et ne remplissent pas l'objectif. Pour ceux qui recherchent du code Java ou Kotlin pour convertir le bitmap en objet fichier. Voici l'article détaillé que j'ai écrit sur le sujet. Convertir Bitmap en fichier dans Android
public static File bitmapToFile(Context context,Bitmap bitmap, String fileNameToSave) { // File name like "image.png"
//create a file to write bitmap data
File file = null;
try {
file = new File(Environment.getExternalStorageDirectory() + File.separator + fileNameToSave);
file.createNewFile();
//Convert bitmap to byte array
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 0 , bos); // YOU can also save it in JPEG
byte[] bitmapdata = bos.toByteArray();
//write the bytes in file
FileOutputStream fos = new FileOutputStream(file);
fos.write(bitmapdata);
fos.flush();
fos.close();
return file;
}catch (Exception e){
e.printStackTrace();
return file; // it will return null
}
}