解决通过Intent调用系统拍照程序,返回图片太小的问题[android]

ALDRIDGE 2011-02-23

以下的代码可以调用系统的拍照程序,

Intentit=newIntent("android.media.action.IMAGE_CAPTURE");

startActivityForResult(it,Activity.DEFAULT_KEYS_DIALER);

按下拍照键后,会返回到你的activity,所以你的activity要在onActivityResult方法里加一个处理,

protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){

super.onActivityResult(requestCode,resultCode,data);

try{

Bundleextras=data.getExtras();

Bitmapb=(Bitmap)extras.get("data");

take=b;

ImageViewimg=(ImageView)findViewById(R.id.image);

img.setImageBitmap(take);

}catch(Exceptione){

}

}

但是这样你会发现这个bitmap尺寸太小了。明显是被压缩过了,要像返回未被压缩的照片,那么你要给调用系统拍照程序intent加上参数,指定图片输出的位置。

1

2

3

Intentit=newIntent("android.media.action.IMAGE_CAPTURE");

it.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(newFile(F.SD_CARD_TEMP_PHOTO_PATH)));

startActivityForResult(it,Activity.DEFAULT_KEYS_DIALER);

这样就是大图片返回了。

protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){

super.onActivityResult(requestCode,resultCode,data);

try{

ImageViewimg=(ImageView)findViewById(R.id.image);

take=U.ResizeBitmap(U.getBitmapForFile(F.SD_CARD_TEMP_PHOTO_PATH),640);

img.setImageBitmap(take);

imgflag=true;

}catch(Exceptione){

}

}

另外注意一下,返回的那个bitmap会很大,你用完以后要把它回收掉,不然你很容易内存报oom错误

publicstaticBitmapResizeBitmap(Bitmapbitmap,intnewWidth){

intwidth=bitmap.getWidth();

intheight=bitmap.getHeight();

floattemp=((float)height)/((float)width);

intnewHeight=(int)((newWidth)*temp);

floatscaleWidth=((float)newWidth)/width;

floatscaleHeight=((float)newHeight)/height;

Matrixmatrix=newMatrix();

//resizethebitmap

matrix.postScale(scaleWidth,scaleHeight);

//matrix.postRotate(45);

BitmapresizedBitmap=Bitmap.createBitmap(bitmap,0,0,width,height,matrix,true);

bitmap.recycle();

returnresizedBitmap;

}

相关推荐