android Camera 小研究 (一)

 好久没有写过代码了,最近为了一个课题 专门去研究了一下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);  
	        }  
	    }  



额 第一次写博客真不适应,以后继续努力吧,



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值