您的位置:首页 > 移动开发 > Android开发

android调用照相机拍照获取照片并做简单剪裁

2012-10-09 16:46 316 查看
1.调用系统的照相机程序

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

 startActivityForResult(intent, TAKE_PHOTO_WITH_DATA);

2.在onActivityResult中处理返回的data

final Bitmap photo = data.getParcelableExtra("data");

如果不需要做剪切处理就可以直接使用图片了,比如输出到ImageView上

imageView.setImageBitmap(photo);

如果需要做剪切处理,就继续向下执行

3.做剪切处理

        Intent intent = new Intent("com.android.camera.action.CROP");

        intent.setType("image/*");

        intent.putExtra("data", data);

        intent.putExtra("crop", "true");

        intent.putExtra("aspectX", 1);

        intent.putExtra("aspectY", 1);

        intent.putExtra("outputX", 128);

        intent.putExtra("outputY", 128);

        intent.putExtra("return-data", true);

startActivityForResult(intent, PHOTO_PICKED_WITH_DATA);

4.在onActivityResult中处理

与第二步相同。

完整代码:

public class SdCardUriTestActivity extends Activity {

    /** Called when the activity is first created. */

    private Button btnTake = null;

    private ImageView lblImage = null;

   

    private static final int PHOTO_PICKED_WITH_DATA = 3021;

    private static final int CAMERA_WITH_DATA = 3023;

   

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

       

        btnTake = (Button)findViewById(R.id.btnTake);

        lblImage = (ImageView)findViewById(R.id.lblImage);

        btnTake.setOnClickListener(new View.OnClickListener() {

           

            @Override

            public void onClick(View v) {

                // TODO Auto-generated method stub

                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

                startActivityForResult(intent, CAMERA_WITH_DATA);

            }

        });

       

    }

   

    @Override

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

        // TODO Auto-generated method stub

        if(resultCode!=RESULT_OK)

            return;

        switch(requestCode){

        case CAMERA_WITH_DATA:

            final Bitmap photo = data.getParcelableExtra("data");

            if(photo!=null){

                doCropPhoto(photo);

            }

        case PHOTO_PICKED_WITH_DATA:

            Bitmap photo1 = data.getParcelableExtra("data");

            if(photo1!=null){

                lblImage.setImageBitmap(photo1);

            }

           

        }

    }

   

    protected void doCropPhoto(Bitmap data){

        Intent intent = getCropImageIntent(data);

        startActivityForResult(intent, PHOTO_PICKED_WITH_DATA);

    }

   

    public static Intent getCropImageIntent(Bitmap data) {

        Intent intent = new Intent("com.android.camera.action.CROP");

        intent.setType("image/*");

        intent.putExtra("data", data);

        intent.putExtra("crop", "true");

        intent.putExtra("aspectX", 1);

        intent.putExtra("aspectY", 1);

        intent.putExtra("outputX", 128);

        intent.putExtra("outputY", 128);

        intent.putExtra("return-data", true);

        return intent;

    }

}

布局文件略

注:1.6的sdk运行此代码会出现问题,具体原因还在调查。也希望知道原因的朋友帮帮忙。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息