安卓相机拍摄的照片尺寸非常小

5

我正在尝试从相机中捕获图像,对其进行压缩,然后将其存储到SD卡中。如果我直接使用下面的代码将其保存到SD卡中,我会得到完整的图像。但是,如果我尝试在系统中加载该图像,则会得到一个非常小的图像大小,例如320 x 240,而不是完整的5 MP图像。

        Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
    intent.putExtra(MediaStore.EXTRA_OUTPUT, getImageUri());
    startActivityForResult(intent, CAMERA_PIC_REQUEST);  

getImageURI()是一个方法名

    private Uri getImageUri() {
    // Store image in dcim
    file = new File(Environment.getExternalStorageDirectory() + "/DCIM","itshelp.jpg");
    imgUri = Uri.fromFile(file);
    file.deleteOnExit();
       Log.e("syS","file is at "+imgUri);
    return imgUri;
}

现在,当我尝试将其保存到内部存储器时,我使用以下代码来获取微小图像:
    public void imageFromCamera() { //code to retrieve image
    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
    startActivityForResult(intent, CAMERA_PIC_REQUEST);  
    }

在我的startActivitForResult方法中,我有以下内容:

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == CAMERA_PIC_REQUEST && resultCode == RESULT_OK) {
        Bitmap bm = (Bitmap) data.getExtras().get("data"); 
        Log.e("sys", "width is "+bm.getWidth()); //im gettting an extremely small width here

        OutputStream outStream = null;
        file = new File(Environment.getExternalStorageDirectory() + "/DCIM","itshelp.png");
        try {
         outStream = new FileOutputStream(file);
         bm.compress(Bitmap.CompressFormat.JPEG, 70, outStream);
         outStream.flush();
         outStream.close();

         Log.i("Hub", "OK, Image Saved to SD");
         Log.i("Hub", "height = "+ bm.getHeight() + ", width = " + bm.getWidth());

        } catch (FileNotFoundException e) {

         e.printStackTrace();
         Log.i("Hub", "FileNotFoundException: "+ e.toString());

        } catch (IOException e) {

         e.printStackTrace();
         Log.i("Hub", "IOException: "+ e.toString());
        }



    }

糟糕,我更新了问题以包含我的实际问题。 - jfisk
你解决了你的问题吗?因为我也遇到了同样的问题。 - Pravinsingh Waghela
1个回答

4
当您在不使用MediaStore.EXTRA_OUTPUT的情况下调用相机意图时,由于意图包未设计传递大内存块,因此相机仅返回一个小缩略图。 从SDK文档MediaStore中了解到:
标准Intent操作,可发送以捕获图像并将其返回给相机应用程序。 调用者可以传递额外的EXTRA_OUTPUT来控制将在何处写入此图像。 如果不存在EXTRA_OUTPUT,则作为位图对象在额外字段中返回一个小尺寸的图像。 这对于只需要小图像的应用程序很有用。 如果存在EXTRA_OUTPUT,则全尺寸图像将写入EXTRA_OUTPUT的Uri值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接