通过Camera、SurfaceView、自己实现拍照及预览效果

简介: 照相机拍照需要的权限:<!--写sd卡权限--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!--读sd卡的权限 --> <uses-permission android:name="android.permis



照相机拍照需要的权限:
<!--写sd卡权限-->
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 <!--读sd卡的权限 -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!--操作摄像头的权限 -->
   <uses-permission android:name="android.permission.CAMERA" />

1.调用系统的拍照功能,获得并保存图片

  public void paizhao(View v){
    	Intent i=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//启动摄像头
    	this.startActivityForResult(i, 1); //启动、并重写返回方法 参数2是返回的识别码
    }
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    	if (requestCode == 1 && null != data && null != data.getExtras()) {//通过识别码判断是拍照进行的返回
			try {
				Bitmap bitmap=(Bitmap) data.getExtras().get("data");//返回参数中接收图片数据
				FileOutputStream fos;//设定输出流对象,准备保存文件
			
				String filename=System.currentTimeMillis()+".jpg";//定义保存文件的名称
				fos = new FileOutputStream
						(Environment.getExternalStorageDirectory()+
								"/"+filename);//输出流地址名称
				//1.压缩格式、2.压缩质量0-100;3.压缩到文件流
				boolean b = bitmap.compress(CompressFormat.JPEG, 20, fos);//图片压缩到本地文件
				if(b){
					Toast.makeText(this, "保存成功"+filename, 0).show();
				}else{
					Toast.makeText(this, "保存失败", 0).show();
				}
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			}
    	}
    	super.onActivityResult(requestCode, resultCode, data);
    }
	
2.通过Camera、SurfaceView、自己实现拍照及预览效果

	1)xml中定义 SurfaceView
	2)activity中findviewbyid,找到 SurfaceView
	
	3)//surfaceholder,配合监听surfaceview的动态
	Callback callback=new SurfaceHolder.Callback() {
			@Override
			public void surfaceDestroyed(SurfaceHolder holder) {
				//停止预览、销毁布局,释放摄像头
				camera.stopPreview();
//				释放硬件资源
				camera.release();
				camera=null;
			}
			@Override
			public void surfaceCreated(SurfaceHolder holder) {
				try {//创建布局,初始化摄像头
					//打开摄像头
					camera=Camera.open();
					//设置摄像头预览画面
					camera.setPreviewDisplay(sv.getHolder());//holder
					//设置摄像头的旋转角度
					camera.setDisplayOrientation(90);
					//0表示摄像头初始角度是0向左,90度表示正,向上
					camera.startPreview();//启动
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			@Override
			public void surfaceChanged(SurfaceHolder holder, int format, int width,
					int height) {
			}
		};
	4)设置回调监听//surfaceiew 监听事件
		sv.getHolder().addCallback(callback);
		
		//点击拍照,保存图片到本地。1.摄像头自动对焦;2.图回调完成图片存储本地;
		public void paizhao(View v){
		PictureCallback jpeg=new PictureCallback() {
			@Override
			public void onPictureTaken(byte[] data, Camera camera) {
				try {
					String filename=System.currentTimeMillis()+"__.jpg";
					FileOutputStream fos = new FileOutputStream
							(Environment.getExternalStorageDirectory()+
									"/"+filename);
					fos.write(data);
					fos.flush();
					fos.close();
					//摄像头预览
					camera.startPreview();//保存之后返回预览界面
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		};
		//摄像头聚焦
		camera.autoFocus(null);
		//摄像头拍照+存储
		camera.takePicture(null, null, jpeg);
	}



目录
相关文章
|
Android开发
Android 裁剪摄像头预览窗口-SurfaceView
Android 裁剪摄像头预览窗口-SurfaceView
767 0
Android 裁剪摄像头预览窗口-SurfaceView
|
Android开发 API
Android Camera2 拍照(四)——对焦模式
原文:Android Camera2 拍照(四)——对焦模式 本篇将重点介绍使用Camera2 API进行手动对焦的设置,以及在手动对焦与自动对焦模式之间切换。
3710 0
|
API Android开发
Android中的拍照camera和camera2
在android我们可以调用系统的相机来进行照相,当然也可以设计自己的照相页面,通过surface进行预览,通过camera api来进行拍照即可。 在Android 5.0之后google推荐使用的Camera2 Api,但是由于兼容问题我们大部分还在使用Camera Api。这里我们一起简单介绍一下,仅仅是预览拍照,至于细节的设置,比如图像大小比例、对焦、图像旋转等就不一一细说了。 首先我们需要在布局中加入一个SurfaceView
733 0
|
Android开发
Android 拍照或相册剪裁后取头像
引用 1、Android7.0 头像 拍照、照片裁剪 2、联合使用:Android 仿IOS的PopupWindow和通用BasePopupWindow搭建 截图 crop_img.
1184 0
|
Android开发 API
Android Camera2 拍照(二)——使用TextureView
原文:Android Camera2 拍照(二)——使用TextureView 上一篇博文简单介绍了使用Camera2 API拍摄照片,并使用SurfaceView作为预览界面。
3003 0
|
API Android开发 容器
Android Camera2拍照(一)——使用SurfaceView
原文:Android Camera2拍照(一)——使用SurfaceView Camera2 API简介 Android 从5.
3662 0
|
存储 传感器 文字识别
Android自定义相机拍照、图片裁剪的实现
原文:Android自定义相机拍照、图片裁剪的实现   最近项目里面又要加一个拍照搜题的功能,也就是用户对着不会做的题目拍一张照片,将照片的文字使用ocr识别出来,再调用题库搜索接口搜索出来展示给用户,类似于小猿搜题、学霸君等app。
1234 0
|
Android开发 数据格式 XML
基于Android TextureView与SurfaceTexture实现相机Camera拍照预览与保存照片
基于Android TextureView与SurfaceTexture实现相机Camera拍照预览与保存照片 写一个简单的例子,实现一个常见的开发功能:拍照功能。
2120 0
|
存储 Android开发 开发工具
Android 拍照、从相册选择图片
在做Android图片上传功能的时候,获取图片的途径一般都有两种:拍照、从相册选择。 一、拍照 调用相机拍照有两种方法: 直接返回图片。
2859 0