Android捕获照片返回低分辨率

时间:2015-09-29 19:25:28

标签: android android-intent android-camera

我刚刚在Stackoverflow中查看了类似的问题,但还没有找到解决方案。

每当我尝试使用我的Android应用程序拍摄照片时,它会返回分辨率为240x360像素的位图照片,尽管相机大约为800万像素。

那么编程代码中的错误在哪里:(看看这个截图)

    private static final int TAKE_PHOTO_CODE = 1;

    private static void takePhoto(){
        final Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(getTempFile(thisOne.getBaseContext())) );
        thisOne.startActivityForResult(intent, TAKE_PHOTO_CODE);
    }

    private static File getTempFile(Context context){
        //it will return /sdcard/image.tmp
        final File path = new File( Environment.getExternalStorageDirectory(), context.getPackageName() );
        if(!path.exists()){
            path.mkdir();
        }
        return new File(path, "image.tmp");
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {
            switch(requestCode){
                case TAKE_PHOTO_CODE:
                    final File file = getTempFile(this);
                    try {
                        Bitmap captureBmp = MediaStore.Images.Media.getBitmap(getContentResolver(), Uri.fromFile(file));
                        int a = captureBmp.getHeight(); // RESULT 240
                        int b = captureBmp.getWidth(); // RESULT 360
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    break;
            }
        }
    }

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

使用它。获取支持的大小列表。循环通过它找到最大的分辨率。

Parameters params = camera.getParameters();
 List<Size> sizes = params.getSupportedPictureSizes();
                Camera.Size size = sizes.get(0);
                for(int i=0;i<sizes.size();i++)
                {
                    if(sizes.get(i).width > size.width)
                        size = sizes.get(i);
                }