通过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
540 0
Android 裁剪摄像头预览窗口-SurfaceView
|
Android开发
打开相机,相册,裁剪图片
打开相机,相册,裁剪图片
|
Android开发
解决Android WebVIew中视频播放前出现的灰色三角形播放图标
最近在开发中,发现WebView中播放视频时,会出现灰色的播放图标,如图:
408 0
|
Android开发 API
Android Camera2 拍照(四)——对焦模式
原文:Android Camera2 拍照(四)——对焦模式 本篇将重点介绍使用Camera2 API进行手动对焦的设置,以及在手动对焦与自动对焦模式之间切换。
3407 0
|
Android开发
Android 拍照或相册剪裁后取头像
引用 1、Android7.0 头像 拍照、照片裁剪 2、联合使用:Android 仿IOS的PopupWindow和通用BasePopupWindow搭建 截图 crop_img.
1160 0
|
存储 传感器 文字识别
Android自定义相机拍照、图片裁剪的实现
原文:Android自定义相机拍照、图片裁剪的实现   最近项目里面又要加一个拍照搜题的功能,也就是用户对着不会做的题目拍一张照片,将照片的文字使用ocr识别出来,再调用题库搜索接口搜索出来展示给用户,类似于小猿搜题、学霸君等app。
1182 0
|
Android开发 数据格式 XML
基于Android TextureView与SurfaceTexture实现相机Camera拍照预览与保存照片
基于Android TextureView与SurfaceTexture实现相机Camera拍照预览与保存照片 写一个简单的例子,实现一个常见的开发功能:拍照功能。
2035 0
|
Android开发 容器 存储
Android照相机拍照Camera
Camera、 1.权限设置 2.intent、startActivityForResult启动照相 3.onActivityResult 接收照相的返回值 3.1、数据图片保dsdcard 3.2、读取sdcard图片 3.3、图片加载到imageView上 4.点击图片;popupwindow或者新页面放大展示 /** * 1.启动系统的相机
1369 0
|
编解码 前端开发 Android开发
照相机预览、拍照以及适配问题的完美解决
         前段时间在做face++相关的功能,对于照相机也是进行了一番研究,小有收获,很感谢有一些大神已经写了相应的博客,让我在他们的项目上进行完善和优化,修复了一些bug,并对机型适配做了一些处理,目前已经保证了团队里面十多部安卓手机的完美适配,具体项目资源可以在http://download.csdn.net/detail/shan286/9799622这个网址上下载。
1375 0