为什么我在android中使用应用程序拍照时会出现低分辨率照片?

问题描述:

当我在我的应用程序中使用相机功能拍摄照片时,即使相机预览效果良好,也会返回低分辨率图像。我调用的代码的代码是:为什么我在android中使用应用程序拍照时会出现低分辨率照片?

final Button takePicButton = (Button) findViewById(R.id.takePicButton); 
    takePicButton.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      startActivityForResult(cameraIntent, REQUEST_CAMERA); 
     } 
    }); 

我对活动结果代码:

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == REQUEST_CAMERA && resultCode == Activity.RESULT_OK) { 
     Bitmap photo = (Bitmap) data.getExtras().get("data"); 
     imageView.setImageBitmap(photo); 

因为(Bitmap) data.getExtras().get("data");将返回一个thumbnail(低分辨率)PIC

解决方案: 你需要使用URI机制(路径到图像文件)并查询MediaProvider以获取全分辨率图像

Save the Full-size Photo

+0

没有“来自结果的URI”。您通过'EXTRA_OUTPUT'提供'Uri',如链接到的文档所示。 – CommonsWare

+0

需要在cameraIntent上指定uri。但即使使用ACTION_IMAGE_CAPTURE启动相机,也会始终使用已保存在相机上的相机设置,例如,如果用户使用低分辨率拍摄相机应用程序,即使指定了uri,您也会始终保持低分辨率 – sansa

启动与ACTION_IMAGE_CAPTURE相机,将始终使用已保存在相机上的相机设置,例如,如果相机设置好的了低分辨率(用户的配置,使用其他相机应用的..)即使你指定了uri,你也会得到低分辨率。

所以,你有两个选择:

  • 构建你自己的相机活动,并将其设置到高分辨率
  • 要求用户启动捕获

Uri selectedImage = data.getData(); 
Bitmap picTaken = getBitmapFromUri(selectedImage); 
之前手动设置的相机分辨率

使用此功能从URI获取图像

private Bitmap getBitmapFromUri(Uri uri) throws IOException { 
    ParcelFileDescriptor parcelFileDescriptor = 
      getActivity().getContentResolver().openFileDescriptor(uri, "r"); 
    FileDescriptor fileDescriptor; 
    if (parcelFileDescriptor != null) { 
     fileDescriptor = parcelFileDescriptor.getFileDescriptor(); 
     Bitmap image = BitmapFactory.decodeFileDescriptor(fileDescriptor); 
     parcelFileDescriptor.close(); 
     ByteArrayOutputStream out = new ByteArrayOutputStream(); 
     image.compress(Bitmap.CompressFormat.PNG, 50, out); 
     return BitmapFactory.decodeStream(new ByteArrayInputStream(out.toByteArray())); 
    } 
    return null; 
}