修改Android中相机拍摄的图像尺寸

时间:2012-09-02 06:37:34

标签: android android-camera

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

这是代码

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

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

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

1 个答案:

答案 0 :(得分: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;
}