相机意图返回小图片

时间:2012-03-14 11:59:50

标签: android android-intent bitmap android-camera

我正在使用相机意图拍摄照片。这是我的代码,效果很好:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); 
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);

我的onActivityResult看起来像这样:

if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
    if (resultCode == RESULT_OK) {
        Bundle extras = data.getExtras();
        Bitmap photo = (Bitmap) extras.get("data");
    }
}

问题是,虽然相机拍摄的照片是480 * 800(我正在使用HTC Desire),但返回的位图只有194 * 324!

知道为什么会这样,以及如何解决它?

谢谢!

3 个答案:

答案 0 :(得分:10)

阅读此答案以获得完整的图像尺寸 How to capture an image and store it with the native Android Camera


当您从额外使用阅读Bitmap时,您将获得图片的Thumbnail

答案 1 :(得分:4)

我有同样的问题,我在google android网站上找到了一个例子:http://developer.android.com/training/camera/photobasics.html

答案 2 :(得分:1)

如果我们想从中产生高质量的图像 相机活动我们没有选择,只能将其保存到文件中,然后使用:

  1. 所以首先我们需要创建一个将成为requestCode的静态int:
  2.   

    public static final int CAPTURE_IMAGE_FULLSIZE_ACTIVITY_REQUEST_CODE =   1777;

    1. 接下来,我们再次点击启动Activity for result的意图:
    2.   

      Intent intent = new Intent(“android.media.action.IMAGE_CAPTURE”);文件   file = new   文件(Environment.getExternalStorageDirectory()+ File.separator +   “image.jpg的”); intent.putExtra(MediaStore.EXTRA_OUTPUT,   Uri.fromFile(文件)); startActivityForResult(意向,   CAPTURE_IMAGE_FULLSIZE_ACTIVITY_REQUEST_CODE);

      这里我们实际上是将一个URI作为额外的方法传递给intent,以便保存图像。

      1. 最后,我们将在onActivityResult中收到结果:

                protected void onActivityResult(int requestCode, int resultCode, Intent data) 
                 {  
                     //Check that request code matches ours:
                     if (requestCode == CAPTURE_IMAGE_FULLSIZE_ACTIVITY_REQUEST_CODE) 
                     {
                         //Get our saved file into a bitmap object:
        
                        File file = new File(Environment.getExternalStorageDirectory()+File.separator +
                 "image.jpg");
                        Bitmap bitmap = decodeSampledBitmapFromFile(file.getAbsolutePath(), 1000, 700);
                     }
            }
        
      2. decodeSampledBitmapFromFile方法是:

        public static Bitmap decodeSampledBitmapFromFile(String path, int reqWidth, int reqHeight) 
        { // BEST QUALITY MATCH
        
            //First decode with inJustDecodeBounds=true to check dimensions
            final BitmapFactory.Options options = new BitmapFactory.Options();
            options.inJustDecodeBounds = true;
            BitmapFactory.decodeFile(path, options);
        
            // Calculate inSampleSize, Raw height and width of image
            final int height = options.outHeight;
            final int width = options.outWidth;
            options.inPreferredConfig = Bitmap.Config.RGB_565;
            int inSampleSize = 1;
        
            if (height > reqHeight) 
            {
                inSampleSize = Math.round((float)height / (float)reqHeight);
            }
            int expectedWidth = width / inSampleSize;
        
            if (expectedWidth > reqWidth) 
            {
                //if(Math.round((float)width / (float)reqWidth) > inSampleSize) // If bigger SampSize..
                inSampleSize = Math.round((float)width / (float)reqWidth);
            }
        
            options.inSampleSize = inSampleSize;
        
            // Decode bitmap with inSampleSize set
            options.inJustDecodeBounds = false;
        
            return BitmapFactory.decodeFile(path, options);
        }
        

        将相关的相机权限添加到清单文件中:

        <uses-permission android:name="android.permission.CAMERA" />
        <uses-feature android:name="android.hardware.camera" />
        <uses-feature android:name="android.hardware.camera.autofocus" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        

        希望它能帮助任何人如何解决这个问题。因为它为我100%工作。

相关问题