Я понимаю, что с помощью BitmapFactory
можно преобразовать файл в растровое изображение, но есть ли способ преобразования изображения растрового изображения в файл?
Преобразование битмапа в файл
Ответ 1
Попробуйте следующее:
bitmap.compress(Bitmap.CompressFormat.PNG, quality, outStream);
Ответ 2
Надеюсь, что это поможет u:
//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();
Ответ 3
File file = new File("path");
OutputStream os = new BufferedOutputStream(new FileOutputStream(file));
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, os);
os.close();
Ответ 4
Преобразование 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());
вы ДОЛЖНЫ использовать File
в onPostExecute
.
Чтобы изменить каталог File
, который будет храниться в кеше
заменить строку:
file = new File(Environment.getExternalStorageDirectory() + File.separator + "temporary_file.jpg");
с:
file = new File(context.getCacheDir(), "temporary_file.jpg");