好久没有写过代码了,最近为了一个课题 专门去研究了一下android Camera 的用法 , 遇到了这样或那样的问题,哎 很坎坷 看来以后要专注点了, 下面开始总结了 ,希望能给大家带来点帮助.
参考-->谷歌的开发文档
主题 : 1.调用系统原有相机进行拍摄,指定路径存储,并进行裁剪.
首先当我们决定拍照时 可定是从一个activity 跳转到一个拍照的界面 那么 这可定离不了它了-Intent, Intent最没有被列入android的四大组件当中 但它的作用值得我们细细研究了.
1 指定文件存储的路径Uri uri = Uri.fromFile(getOutputMediaFile(TypeImage));
2 准备用来跳转到相机的 Intent
Intent _Intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE) ;
_Intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
MediaStore.ACTION_IMAGE_CAPTURE 这个参数是指定相机拍照的格式
MediaStore.Extra_OUTPUT 相当于 " output"
uri 为相片的存储路径.
3 通过startActivity启动 Intnet ;
startActivityForResult(_Intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
4 拍照结束返回之前的 Activity 想要得到信息则要用到 onActivityResult();方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
// Image captured and saved to fileUri specified in the Intent
Toast.makeText(this, "Image saved to:\n" +
data.getData(), Toast.LENGTH_LONG).show();
} else if (resultCode == RESULT_CANCELED) {
// User cancelled the image capture
} else {
// Image capture failed, advise user
}
}//这是google 官方给的代码,但是这是有错的 因为这里的 data = null; 这与为什么是null 我也不清楚 希望哪位大牛给指点下
其实这里只要我们得到RESULT_OK时就代表着拍照成功了,不管那个data了
下面是我的代码 ,得到RESULT_OK后 进行图片的裁剪 这里又用到了我们的一个Intent
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
//super.onActivityResult(requestCode, resultCode, data);
if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
startPhotoZoom(fileUri);
//startPhotoZoom(getOutputMediaFileUri(MEDIA_TYPE_IMAGE));
} else if (resultCode == RESULT_CANCELED) {
// User cancelled the image capture
}
}else if (requestCode == 3) {
if(data != null){
setPicToView(data);
}
}
}
/**
* 调用系统自带裁剪工具对拍照图片进行裁剪
* @param uri
*/
public void startPhotoZoom(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setClassName("com.android.camera", "com.android.camera.CropImage");
intent.setDataAndType(uri, "image/*");
//下面这个crop=true是设置在开启的Intent中设置显示的VIEW可裁剪
intent.putExtra("crop", "true");
// aspectX aspectY 是宽高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// outputX outputY 是裁剪图片宽高
intent.putExtra("outputX", 150);
intent.putExtra("outputY", 150);
intent.putExtra("return-data", true);
startActivityForResult(intent, 3);
}
下面是将裁剪的图片显示出来
/**得到裁剪后的图片并在显示
* 注意这里的截图是没有保存的
* @param picdata
*/
private void setPicToView(Intent picdata) {
Bundle extras = picdata.getExtras();
if (extras != null) {
Bitmap photo = extras.getParcelable("data");
Drawable drawable = new BitmapDrawable(photo);
// ib.setBackgroundDrawable(drawable);
mImageView.setBackgroundDrawable(drawable);
}
}
额 第一次写博客真不适应,以后继续努力吧,