0

我正在尝试拍摄指定尺寸的图像并将其保存在 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;
}

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

还是需要单独的相机应用程序?

4

1 回答 1

0

如果您的图像保存为文件,请从该文件创建位图并使用此方法减小其大小并将此位图传递给您的 Activity:

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;
}
于 2012-09-02T08:27:53.140 回答