2011-09-06 57 views
4

我试图从相机捕捉图像,压缩它,然后将其存储到SD卡。如果我直接使用下面的代码直接将其保存到SD卡中,我会看到完整的图像。但是,如果我尝试在系统中加载图像,我会得到一个超级小图像大小,如320乘240,而不是完整的5 mp图像。从相机的Android图片被拍摄在一个非常小的尺寸

 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()); 
     } 



    } 
+0

这是什么问题? –

+0

哎呀,更新的问题,包括我的实际问题。 – jfisk

回答

3

当您在没有MediaStore.EXTRA_OUTPUT的情况下调用相机意图时,相机将仅返回一个小缩略图,因为意图束并非设计用于传递较大的内存块。 来自SDK文档for MediaStore

标准意图操作,可发送给相机应用程序捕捉图像并将其返回。 调用者可能会传递额外的EXTRA_OUTPUT来控制此图像的写入位置。如果EXTRA_OUTPUT不存在,则在额外的字段中将小图像作为位图对象返回。这对于只需要小图像的应用程序很有用。如果EXTRA_OUTPUT存在,则全尺寸图像将被写入到EXTRA_OUTPUT的Uri值。