Android相机意图:如何获得全尺寸照片? [英] Android Camera Intent: how to get full sized photo?
问题描述
我使用意图启动相机:
Intent cameraIntent = new Intent(
android.provider.MediaStore .ACTION_IMAGE_CAPTURE);
getParent()。startActivityForResult(cameraIntent,CAMERA_PIC_REQUEST);
并使用:
Bitmap thumbnail =(Bitmap)data.getExtras()。get(data);
photoImage.setImageBitmap(thumbnail);
photoImage.setVisibility(View.VISIBLE);
但它只是一个缩略图,如何获得完整的位图?我知道我可以使用自己的活动并使用:
Camera.PictureCallback()
谢谢!
编辑:
我也尝试过:
public void onActivityResult(int requestCode,int resultCode,Intent data){
Uri uri = data.getData();
imageView.setImageURI(uri);
}
它适用于从图库中选择的照片,但对于相机意图,data.getData ()返回null。
解决方案要获得完整大小的相机图片,你应该指向相机保存图片在临时文件, / p>
私有URI mImageUri;
Intent intent = new Intent(android.media.action.IMAGE_CAPTURE);
文件照片;
try
{
//存储相机拍摄照片的位置
photo = this.createTemporaryFile(picture,.jpg);
photo.delete();
}
catch(Exception e)
{
Log.v(TAG,无法创建文件拍照!
Toast.makeText(活动,请检查SD卡!图像拍摄不可能!,10000);
return false;
}
mImageUri = Uri.fromFile(photo);
intent.putExtra(MediaStore.EXTRA_OUTPUT,mImageUri);
// start camera intent
activity.startActivityForResult(this,intent,MenuShootImage);
private文件createTemporaryFile(String part,String ext)throws Exception
{
文件tempDir = Environment.getExternalStorageDirectory();
tempDir = new File(tempDir.getAbsolutePath()+/。temp /);
if(!tempDir.exists())
{
tempDir.mkdirs();
}
return File.createTempFile(part,ext,tempDir);
}
然后在图像捕获意向完成工作后 - 只需从
imageUri
使用以下代码:public void grabImage(ImageView imageView)
{
this.getContentResolver()。notifyChange(mImageUri,null);
ContentResolver cr = this.getContentResolver();
位图位图;
try
{
bitmap = android.provider.MediaStore.Images.Media.getBitmap(cr,mImageUri);
imageView.setImageBitmap(bitmap);
}
catch(Exception e)
{
Toast.makeText(this,Failed to load,Toast.LENGTH_SHORT).show();
Log.d(TAG,无法加载,e);
}
}
//相机意图完成后调用
@Override
public void onActivityResult(int requestCode,int resultCode,Intent意图)
{
if(requestCode == MenuShootImage&& resultCode == RESULT_OK)
{
ImageView imageView;
// ...一些代码来膨胀/创建/找到合适的ImageView来放置抓取的图像
this.grabImage(imageView);
}
super.onActivityResult(requestCode,resultCode,intent);
}
I am using intent to launch camera:
Intent cameraIntent = new Intent( android.provider.MediaStore.ACTION_IMAGE_CAPTURE); getParent().startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);
and using:
Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); photoImage.setImageBitmap(thumbnail); photoImage.setVisibility(View.VISIBLE);
But it is only a thumbnail, how do I get the full bitmap? I know I can use my own Activity and use:
Camera.PictureCallback()
But is there anyway to do it using Intent?
Thanks!
edit:
I also tried:
public void onActivityResult(int requestCode, int resultCode, Intent data) { Uri uri = data.getData(); imageView.setImageURI(uri); }
It works for photo selected from gallery, but for camera intent, data.getData() returns null.
解决方案To get full sized camera image you should point camera to save picture in temporary file, like:
private URI mImageUri; Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); File photo; try { // place where to store camera taken picture photo = this.createTemporaryFile("picture", ".jpg"); photo.delete(); } catch(Exception e) { Log.v(TAG, "Can't create file to take picture!"); Toast.makeText(activity, "Please check SD card! Image shot is impossible!", 10000); return false; } mImageUri = Uri.fromFile(photo); intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri); //start camera intent activity.startActivityForResult(this, intent, MenuShootImage); private File createTemporaryFile(String part, String ext) throws Exception { File tempDir= Environment.getExternalStorageDirectory(); tempDir=new File(tempDir.getAbsolutePath()+"/.temp/"); if(!tempDir.exists()) { tempDir.mkdirs(); } return File.createTempFile(part, ext, tempDir); }
Then after image capture intent finished to work - just grab your picture from
imageUri
using following code:public void grabImage(ImageView imageView) { this.getContentResolver().notifyChange(mImageUri, null); ContentResolver cr = this.getContentResolver(); Bitmap bitmap; try { bitmap = android.provider.MediaStore.Images.Media.getBitmap(cr, mImageUri); imageView.setImageBitmap(bitmap); } catch (Exception e) { Toast.makeText(this, "Failed to load", Toast.LENGTH_SHORT).show(); Log.d(TAG, "Failed to load", e); } } //called after camera intent finished @Override public void onActivityResult(int requestCode, int resultCode, Intent intent) { if(requestCode==MenuShootImage && resultCode==RESULT_OK) { ImageView imageView; //... some code to inflate/create/find appropriate ImageView to place grabbed image this.grabImage(imageView); } super.onActivityResult(requestCode, resultCode, intent); }
这篇关于Android相机意图:如何获得全尺寸照片?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!