Android 通过Intent调用系统拍照程序出现图片太小的问题解决办法
Android通过Intent调用系统拍照程序出现图片太小的问题解决办法
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加上参数,指定图片输出的位置。
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; }
以上就是Android调用系统拍照出现问题的解决办法,如有疑问大家请留言讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!