Android开发教程--关于系统相机拍照获取的照片尺寸较小问题的解决

网上大部分的解决方案,都是如下方式:

Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
startActivityForResult(intent,REQUEST_CODE_CAPTURE_CAMEIA);

拍照完成之后,回调:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != RESULT_OK) { //此处的 RESULT_OK 是系统自定义得一个常量 
return; 
}
if (data!=null) {
if (requestCode == REQUEST_CODE_CAPTURE_CAMEIA) {
Uri uri = data.getData();

if (uri == null) {
//use bundle to get data
Bundle dataBundle = data.getExtras();
if (dataBundle != null) {
Bitmap photo = (Bitmap) dataBundle.get("data");
if (photo!=null) {

//在一些手机上获取到的照片,发现尺寸很小

}

}

} else {

//通过uri来显示图片

imageView.setImage(uri);

}

}

}

}

通过实验之后发现,在一些手机上是通过uri来获取到图片的,都是可以获取到实际拍摄大小的照片。

还有一些手机是通过data.getExtras().get("data")来获取拍摄的照片,但是发现实际得到的照片尺寸却很小。

通过研究找到了解决的方案如下:

改写调用方法:

String filename = Tools.getCurDateStr()+".jpg";
cameraFile = new File(Environment.getExternalStorageDirectory()+"/"+Const.FOLDER_VOC_TEMP+"/"+filename);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(cameraFile));
startActivityForResult(intent, REQUEST_CODE_CAPTURE_CAMEIA);

回调的时候:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

if (cameraFile.exists()) {
Bitmap bitmap = null;
try {
FileInputStream fis = new FileInputStream(cameraFile);
bitmap = BitmapFactory.decodeStream(fis);
fis.close();
} catch (Exception e) { 
e.printStackTrace(); 
}
if (bitmap!=null) {
Log.e(getClass().getName(), (bitmap.getWidth()+","+bitmap.getHeight()));
}
}

}

这样就解决了此问题。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。