Преобразование Bitmap
в File
необходимо выполнить в фоновом режиме (НЕ В ГЛАВНОЙ РЕЗЬБЕ), в частности, пользовательский интерфейс зависает, особенно если bitmap
было большим
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);
}
}
Называя это
new fileFromBitmap(my_bitmap, getApplicationContext()).execute();
вы ДОЛЖНЫ использовать file
в onPostExecute
.
Чтобы изменить каталог file
для хранения в кеше
заменить строку:
file = new File(Environment.getExternalStorageDirectory() + File.separator + "temporary_file.jpg");
с:
file = new File(context.getCacheDir(), "temporary_file.jpg");