我们程序有时经常会调用手机里的相机照相,但是照相后的照片存在哪里呢?如果需要将照相存进数据库时该怎么办?
这时,我们可以给相机设置一个相片输出路径,用来存放相机照相后的图片,当需要将相片存进数据库时,只需要将其路径存进数据库,取出时根据路径找到相片再还原出来就可以了。
可以用如下代码给调用的相机指定输出路径:
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(路径名));
startActivityForResult(intent,0);
这里的路径名就是你要存放相片的路径名,如:
Environment.getExternalStorageDirectory().getPath()+ File.pathSeparator +"myphoto";
为在SD卡根目录下创建一张myphoto的相片。
当然,如果不想将相片放在SD卡下,也可以放在程序中,获取程序路径有:
1、获取当前程序路径:
getApplicationContext().getFilesDir().getAbsolutePath();
2、获取该程序安装包路径:
getApplicationContext().getPackageResourcePath();
3、获取默认数据库路径:
getApplicationContext().getDatabasePath().getAbsolutePath();
当然,现在手机像素那么高,如果还原的时候直接还原相片的图片,有可能会造成内存不足,因此很多时候需要对相机的相片进行缩小。缩小相片基本可以按照以下代码进行:
public static Bitmap resizeBitmap(Bitmap bitmap,int width,int height){
// 获得相片的原始大小
int oriWidth = bitmap.getWidth();
int oriHeight = bitmap.getHeight();
// 获得相片的缩放比例
float scaleWidth = (float)width/oriWidth;
float scaleHeight = (float)height/oriHeight;
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth,scaleHeight);
Bitmap mBitmap = Bitmap.createBitmap(bitmap,0,0,
width,height,matrix,true);
// 记得将原来的bitmap对象回收
bitmap.recycle();
return mBitmap;
}