在安卓中拍照显示图片到指定的ImageView时候经常会使用Bitmap,但是Bitmap如果不及时回收会导致内存溢出的问题,所以在适合的时机回收bitmap很重要。否则拍了几张照片之后就会导致程序崩溃而欲哭无泪了。
package com.example.Utils;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Environment;
public class SaveImage {
private Bitmap bitmap;
private String FileName;
private String StorageDirectoryName;
//安检图片路径
private String imagePath;
public SaveImage(Bitmap bitmap, String fileName, String storageDirectoryName) {
this.bitmap = bitmap;
FileName = fileName;
StorageDirectoryName = storageDirectoryName;
File tmpDir = new File(Environment.getExternalStorageDirectory()
+ "/"+StorageDirectoryName);
if (!tmpDir.exists()) {
tmpDir.mkdir();
}
String photo_name1 = FileName + System.currentTimeMillis() + ".png";
imagePath = tmpDir.getAbsolutePath() + "/" + photo_name1;
}
public String getImagePath(){
return imagePath;
}
public Uri SaveBitmap() {
File img = new File(imagePath);
try {
FileOutputStream fos = new FileOutputStream(img);
bitmap.compress(Bitmap.CompressFormat.PNG, 85, fos);
fos.flush();
fos.close();
return Uri.fromFile(img);
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
}finally{
bitmap.recycle();
}
}
}
上面这段程序就是拍照之后将图片保存到指定的文件目录下,<span style="font-family: Arial, Helvetica, sans-serif;">StorageDirectoryName为文件根目录,</span><span style="font-family: Arial, Helvetica, sans-serif;">FileName为图片名称,将拍的的照片保存起来便于以后操作。</span>
<span style="font-family: Arial, Helvetica, sans-serif;">SaveBitmap方法之后返回图片的URI,最后调用</span>
<span style="font-family: Arial, Helvetica, sans-serif;">f</span><span style="font-family: Arial, Helvetica, sans-serif;">inally{</span>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="white-space:pre"> </span>bitmap.recycle();
<span style="white-space:pre"> </span>}</span>
<span style="font-family: Arial, Helvetica, sans-serif;">将bitmap回收,这样无论拍多少次都不会导致bitmap的内存溢出问题。然后imageview.setImageUri方法就可以设置拍下来的图片了。</span>