2012-09-02 290 views
0

我想拍摄指定尺寸的图像并将其保存在SD卡上的所需位置。我正在使用intent.putExtra通过默认的相机应用程序拍摄图像。修改Android中摄像头拍摄的图像的尺寸

这里去的代码

public void onClick(View v) { 
    //Setting up the URI for the desired location 
    imageFile = "bmp"+v.getId()+".png"; 
    File f = new File (folder,imageFile); 
    imageUri = Uri.fromFile(f); 

    //Setting the desired size parameters 
    private Camera mCamera;  
    Camera.Parameters parameters = mCamera.getParameters(); 
    parameters.setPreviewSize(width, height); 
    mCamera.setParameters(parameters);  

    //Passing intent.PutExtras to defaul camera activity 
    Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
    i.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageUri); 
    startActivityForResult(i,CAMERA_PIC_REQUEST); 
} 




@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    super.onActivityResult(requestCode, resultCode, data); 
    if(resultCode == RESULT_OK){ 
    return; 
} 

拍摄的图像后,相机activiy力关闭。 是否可以通过这种方式修改默认相机活动拍摄的图像的大小?

或者单独的相机应用程序是必要的?

+0

我们想不通为什么有问题如果你不告诉我们什么问题*是*。 – Eric

+0

我编辑了这个问题,请看一下 –

+0

你可以用强制关闭的完整日志来编辑你的问题吗?而且,如果你能够阅读它们,那么突出显示那部分代码也是有用的。 – Eric

回答

0

如果你的图像保存为一个文件,从文件中创建位图,并用这种方法减少它的大小和该位图传递到您的活动:

public static Bitmap decodeFile(File file, int requiredSize) { 
    try { 

     // Decode image size 
     BitmapFactory.Options o = new BitmapFactory.Options(); 
     o.inJustDecodeBounds = true; 
     BitmapFactory.decodeStream(new FileInputStream(file), null, o); 

     // The new size we want to scale to 

     // Find the correct scale value. It should be the power of 2. 
     int width_tmp = o.outWidth, height_tmp = o.outHeight; 
     int scale = 1; 
     while (true) { 
      if (width_tmp/2 < requiredSize 
        || height_tmp/2 < requiredSize) 
       break; 
      width_tmp /= 2; 
      height_tmp /= 2; 
      scale *= 2; 
     } 

     // Decode with inSampleSize 
     BitmapFactory.Options o2 = new BitmapFactory.Options(); 
     o2.inSampleSize = scale; 
     return BitmapFactory.decodeStream(new FileInputStream(file), null, 
       o2); 
    } catch (FileNotFoundException e) { 
    } 
    return null; 
}