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

照相机拍照需要的权限:
<!--写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);
	}
时间: 2024-11-02 21:30:04

通过Camera、SurfaceView、自己实现拍照及预览效果的相关文章

在android中用surfaceview播放视频时,实现未播放的预览效果?

问题描述 在android中用surfaceview播放视频时,实现未播放的预览效果? 在android中用surfaceview播放视频时,如何在surfaceview的出现时就加载视频的第一帧,实现未播放的预览效果? 类似于图的那种效果,谁有什么解决方法吗? 解决方案 http://download.csdn.net/detail/ohbxiaoxin/8320741 两个控件叠加,至于预览的图片,需要事先从视频中提取出来.

JavaScript教程:详细解析网页图片预览效果

随着浏览器安全性的提高,要实现图片预览也越来越困难.不过群众的智慧是无限的,网上也有很多变通或先进的方法来实现.在研究了各种预览方法后,作为总结,写了这个程序,跟大家一起分享.上次写的简便无刷新文件上传系统最初的目的就是用来实现这个图片预览效果. 兼容:ie6/7/8, firefox 3.5.5后台支持下还兼容:opera 10.10, safari 4.0.4, chrome 3.0 详细程序说明和效果预览请看这里: 完整实例下载(asp.net版) 完整实例下载(asp版)

Asp.net图片上传实现预览效果的简单代码

这篇文章介绍了Asp.net图片上传实现预览效果的简单代码,有需要的朋友可以参考一下   在页面上放入一个上传控件和一个图片控件. 复制代码 代码如下:  <asp:FileUpload ID="FileUpload1" runat="server" onpropertychange="show(this.value)"/>         <asp:Image ID="Image1" runat="

js兼容火狐显示上传图片预览效果的方法

  本文实例讲述了js兼容火狐显示上传图片预览效果的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 <!doctype html> <html> <head> <meta content="text/html; charset=GBK" http-equiv="Content-

JS上传图片前实现图片预览效果的方法

 这篇文章主要介绍了JS上传图片前实现图片预览效果的方法,涉及javascript操作图片的技巧,需要的朋友可以参考下     本文实例讲述了JS上传图片前实现图片预览效果的方法.分享给大家供大家参考.具体实现方法如下:   代码如下: <!doctype html public "-//w3c//dtd html 4.01//en" "http://www.w3.org/tr/html4/strict.dtd"> <html xmlns=&quo

Win7/Win8系统如何取消任务栏预览效果只显示文字提示

  故障现象: 从Windows 7系统开始任务栏窗口有预览功能,即使关闭窗口预览效果也是有窗口名称提示.如下图所示: 由于某些原因需要取消这些功能,希望实现如之前XP系统鼠标指针移动到此窗口只显示文本提示而无窗口预览功能.如下图所示: 原因分析: Win7.Win8系统,鼠标移动到任务栏窗口时其实此文本已经显示,只不过由于预览窗口存在被挡住,只要通过注册表修改延长任务栏缩略图的预览延迟时间即可. 解决方案: 注意:修改注册表具有一定风险,如果您的电脑系统盘下有比较重要的资料和数据,在修改注册表

用netbeans 6.9.1写Swing程序,预览效果和实际效果怎么不一样

问题描述 用netbeans6.9.1写Swing程序,直接拖拽了几个空间上去,结果预览效果和实际效果不一样.实际效果和AWT的一样,怎么回事? 解决方案 解决方案二:用eclipse也会吧,预览和实际多少会有差别的解决方案三:那你调用的是swing包还是awt包呢,要是调用的awt的包不一样就对了,因为当时awt的api会调用系统平台的api,说白了就是在不同的平台下面显示效果会有些差别,当然如果全部是用swing写的就不应该出现lz所说的了解决方案四:自己顶起,解决了解决方案五:netbea

网页打印功能,不同电脑预览效果不一样。

问题描述 网页打印功能,不同电脑预览效果不一样. SSH框架:用JSP页面设计了一个网页打印功能.但是为什么打印预览的效果,在不同的电脑上显示不同呢,求大神详细解析下,如果需要代码可以提出.跪求~ 解决方案 同版本的ie浏览器在不同电脑网页显示效果不一样,解决方法 解决方案二: 应该是浏览器的兼容问题吧!

jquery验证上传图片且带大小验证与图片预览效果

jquery验证上传图片且带大小验证与图片预览效果 */ function submit_upload_picture(){  var file = $('file_c').value;  if(!/.(gif|jpg|jpeg|png|gif|jpg|png)$/.test(file)){         alert("图片类型必须是.gif,jpeg,jpg,png中的一种")     }else{   $('both_form').action="file!upload