在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Android平台开发 → android 调用系统相机

android 调用系统相机

Android平台开发

下载此实例
  • 开发语言:Java
  • 实例大小:1.60M
  • 下载次数:37
  • 浏览次数:978
  • 发布时间:2015-07-10
  • 实例类别:Android平台开发
  • 发 布 人:dailkjlkj
  • 文件格式:.rar
  • 所需积分:2
 相关标签: 调用系统相机

实例介绍

【实例简介】

【实例截图】

【核心代码】

package com.example.t5camera;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
import android.graphics.ImageFormat;
import android.hardware.Camera;
import android.hardware.Camera.AutoFocusCallback;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.ShutterCallback;
import android.os.Bundle;
import android.app.Activity;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.Menu;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;

public class MainActivity extends Activity implements  SurfaceHolder.Callback{

	private int screenWidth; //屏幕的宽
	private int screenHeight;//屏幕的高
	private SurfaceView sufaceViewCamera;
	private SurfaceHolder sufaceHolder;
	
	//摄像头对象
	private Camera camera ;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		// 不显示标题栏
		requestWindowFeature(Window.FEATURE_NO_TITLE);

		// 全屏显示
		getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

		setContentView(R.layout.activity_main);
		
		//获取屏幕的宽和高
		//获取窗体管理对象
		WindowManager wm = getWindowManager();
		
		//通过窗体管理对象,获取显示器对象
		Display display = wm.getDefaultDisplay();
		
		//创建用于封装宽和高的矩阵对象
		DisplayMetrics displayMetrics = new DisplayMetrics();
		
		//通过显示器对象,获取其宽和高,并保存至DisplayMetrics矩阵对象
		display.getMetrics(displayMetrics);
		
		screenWidth = displayMetrics.widthPixels;
		screenHeight = displayMetrics.heightPixels;
		
		
		//获取用于显示预览的SurfaceView
		sufaceViewCamera = (SurfaceView)findViewById(R.id.surfaceViewCamera);
		sufaceHolder = sufaceViewCamera.getHolder();
		sufaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); //兼容android2.2等早期版本
		sufaceHolder.addCallback(this);
		
		//拍照
		//绑定SurfaceView的单击事件
		sufaceViewCamera.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				
				//启动摄像头的自动对焦
				camera.autoFocus(new AutoFocusCallback() {
					
					@Override
					public void onAutoFocus(boolean success, Camera camera) {
						//自动对焦完成
						if(success){
							
							//通过摄像头,采集照片
							camera.takePicture(
									
									new ShutterCallback() {
								
											@Override
											public void onShutter() {
												// TODO Auto-generated method stub
												
											}
									}, 
									new PictureCallback(){

										@Override
										public void onPictureTaken(byte[] arg0,
												Camera arg1) {
											//保存原始图片信息
											
										}
										
									},
									
									new PictureCallback(){

										@Override
										public void onPictureTaken(byte[] data,
												Camera camera) {
											
											try {
												//创建Bitmap图片对象
												Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
												
												//创建图片文件
												File bitMapFile = new File(MainActivity.this.getExternalFilesDir(null).getPath() "/" System.currentTimeMillis() ".jpg");
												
												//输出流
												FileOutputStream fos = new FileOutputStream(bitMapFile);
												
												//将图片对象中的图片信息,通过输出流,写入图片文件
												bitmap.compress(CompressFormat.JPEG, 100, fos);
												
												//关闭输出流
												fos.close();
												
												//停止预览
												camera.stopPreview();
												
												//重新开始预览
												camera.startPreview();
											} catch (FileNotFoundException e) {
												// TODO Auto-generated catch block
												e.printStackTrace();
											} catch (IOException e) {
												// TODO Auto-generated catch block
												e.printStackTrace();
											}
											
										}
										
									}
							);
							
						}
						
					}
				});
			}
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
	
	//SurfaceView改变
	@Override
	public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
		// TODO Auto-generated method stub
		
	}
	
	//预览
	//SurfaceView创建
	@Override
	public void surfaceCreated(SurfaceHolder arg0) {
		//打开后置摄像头
		camera = Camera.open(0);
		camera.setDisplayOrientation(90);
		
		//设置预览照片参数
		try {
			//创建摄像头参数集合
			Camera.Parameters params = camera.getParameters();
			
			//设置预览尺寸
			params.setPreviewSize(screenWidth, screenHeight);
			
			//设置预览fps范围
			params.setPreviewFpsRange(4, 10);
			
			//设置图片格式
			params.setPictureFormat(ImageFormat.JPEG);
			params.set("jpeg-quality", 85);
			
			//设置图片大小
			params.setPictureSize(screenWidth, screenHeight);
			
			//设置预览控件(SurfaceHolder--->SurfaceView)
			camera.setPreviewDisplay(sufaceHolder);
			
			//开始预览
			camera.startPreview();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	//SurfaceView销毁
	@Override
	public void surfaceDestroyed(SurfaceHolder arg0) {
		// TODO Auto-generated method stub
		
	}

}

标签: 调用系统相机

实例下载地址

android 调用系统相机

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警