android的camera
来源:互联网 发布:淘宝首页html代码示例 编辑:程序博客网 时间:2024/04/26 08:56
Android手机关于Camera的使用,一是拍照,二是摄像,由于Android提供了强大的组件功能,为此对于在Android手机系统上进行Camera的开发,我们可以使用两类方法:一是借助Intent和MediaStroe调用系统Camera App程序来实现拍照和摄像功能,二是根据Camera API自写Camera程序。由于自写Camera需要对Camera API了解很充分,而且对于通用的拍照和摄像应用只需要借助系统Camera App程序就能满足要求了,为此先从调用系统Camera App应用开始来对Android Camera做个简单的使用小结。
1.在androidmanifest.xml中加入权限
<uses-permissionandroid:name="android.permission.CAMERA"/>
<!-- 照相权限 -->
<uses-featureandroid:name="android.hardware.camera"/>
<!-- 聚焦 -->
<uses-featureandroid:name="android.hardware.camera.autofocus"/>
<!-- 在SDCard中创建与删除文件权限 -->
<uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard写入数据权限 -->
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
2.代码书写
//调用摄像头
Button camera=(Button)findViewById(R.id.camera);
camera.setOnClickListener(newOnClickListener() {
@Override
publicvoidonClick(View v) {
// TODO Auto-generated method stub
Intentintent=newIntent(MainActivity.this,Cameradome.class);
startActivity(intent);
}
});
}
跳转类
package com.example.a3;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.hardware.Camera.AutoFocusCallback;
import android.hardware.Camera.Parameters;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.ShutterCallback;
import android.os.Bundle;
import android.os.Environment;
import android.view.Display;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
publicclassCameradome extendsActivity {
/*
* author杨
*/
private SurfaceViewsurface;
private Buttonpaizhao;
private SurfaceHolderHolder;
private Cameracam;// 导入硬件的包
private Viewlayout1, layout2;
privateint i = 0;
privateboolean focus =false;
privateboolean previewRunning =true;//判断回调
privateint count = 0;//计算点击的次数
privatelong firsttime;
privatelong lasttime;
@Override
protectedvoid onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);//全屏显示
setContentView(R.layout.activity_camera);
paizhao = (Button)findViewById(R.id.camera);
surface = (SurfaceView)findViewById(R.id.surface);
layout1 = findViewById(R.id.buttonlayout);
layout2 = findViewById(R.id.stoplayout);
Holder =surface.getHolder();
Holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);//增加缓冲区处理
Holder.setKeepScreenOn(true);//保持持续拍照
Holder.addCallback(newMySurfaceViewCallback());//添加操作
Holder.setFixedSize(1280,720);//设置像素
this.paizhao.setOnClickListener(new onclicklistener());
}
@Override
publicbooleanonTouchEvent(MotionEvent event) {
//TODO Auto-generated method stub
if (event.getAction() ==MotionEvent.ACTION_DOWN) {
if (firsttime != 0 && System.currentTimeMillis()-firsttime> 500) {
count = 0;
}
count++;
if (count == 1) {
firsttime = System.currentTimeMillis();
// 单击
layout1.setVisibility(ViewGroup.VISIBLE);//显示,显示为0不显示为8
Toast.makeText(this,"对焦", Toast.LENGTH_SHORT).show();
cam.autoFocus(newAutoFocusCallbackimpl());//聚焦 focus = false;
}elseif(count== 2) {
lasttime = System.currentTimeMillis();
if (lasttime -firsttime < 500) {
// 双击
layout1.setVisibility(ViewGroup.GONE);
Toast.makeText(this,"double Touch",1).show();
}
count = 0;
firsttime = 0;
lasttime = 0;
}
}
returntrue;
}
publicvoid changecamera(View v) {
//换摄像头
if (i == 0) {
i = 1;
}else{
i = 0;
}
cam.stopPreview();//停掉原来摄像头的预览
cam.release();//释放资源
cam =null;//取消原来摄像头
cam = Camera.open(i);//打开当前选中的摄像头
try {
cam.setPreviewDisplay(Holder);//通过surfaceview显示取景画面
}catch(IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
cam.startPreview();//开始预览
previewRunning =true;
/*
* cam.stopPreview();//停止预览
* layout1.setVisibility(ViewGroup.GONE);//显示,显示为0不显示为8
* layout2.setVisibility(ViewGroup.VISIBLE);//显示,显示为0不显示为8
*/
}
privateclass onclicklistener implements OnClickListener{
//拍照
@Override
publicvoid onClick(View v) {
// TODO Auto-generated method stub
if (cam !=null) {
cam.autoFocus(newAutoFocusCallbackimpl());
if (focus ==true) {
cam.takePicture(sc, pc, jpgcall);
focus = false;
}
}
}
}
// 操作
privateclass MySurfaceViewCallback implementsSurfaceHolder.Callback {
@Override
publicvoidsurfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
// 预览打开camera
cam = Camera.open(i);//取得后摄像头
WindowManagermanager = (WindowManager) Cameradome.this
.getSystemService(Context.WINDOW_SERVICE);//取得手机的宽度和高度进行内容填充
Displaydisplay = manager.getDefaultDisplay();//通过display得到相机的一些屏幕参数
Parametersparam = cam.getParameters();
param.setPreviewSize(display.getWidth(),display.getHeight());//设置预览大小
param.setPreviewFrameRate(5);//一秒5帧帧数越高越清晰;
param.setPictureFormat(PixelFormat.JPEG);//图片形式
param.set("jpen-quality",85);//图片质量
cam.setParameters(param);
try {
cam.setPreviewDisplay(Holder);
}catch(IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
cam.startPreview();// 进行预览
previewRunning = true;
}
@Override
publicvoidsurfaceChanged(SurfaceHolder holder,int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
publicvoidsurfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
if (cam !=null) {
if (previewRunning) {
cam.stopPreview();// 停止预览
previewRunning = false;
}
cam.release();// 释放摄像头
}
}
}
privateclass AutoFocusCallbackimpl implementsAutoFocusCallback {
@Override
publicvoid onAutoFocus(boolean success,android.hardware.Camera camera) {
// TODO Auto-generated method stub
if (success) {
// 对焦成功
focus = true;
// cam.takePicture(sc, pc, jpgcall);//拍照
}
}
}
private PictureCallbackjpgcall = new PictureCallback() {
@Override
publicvoid onPictureTaken(byte[] data,android.hardware.Camera camera) {
// TODO Auto-generated method stub
// 图片存储操作
Bitmapbmp = BitmapFactory.decodeByteArray(data, 0, data.length);
StringfileName = Environment.getExternalStorageDirectory()
.toString()
+File.separator
+"mldnphoto"
+File.separator
+"MLDN_"+ System.currentTimeMillis() +".jpg";// +System.currentTimeMillis()
// 获取系统时间
Filefile = newFile(fileName);
if(!file.getParentFile().exists()) {
file.getParentFile().mkdirs();//创建文件夹
}
try {
BufferedOutputStreambos =newBufferedOutputStream(
newFileOutputStream(file));
bmp.compress(Bitmap.CompressFormat.JPEG, 80, bos);//向缓冲区之中压缩图片
bos.flush();
bos.close();
Toast.makeText(Cameradome.this,
"拍照成功,照片保存在" + fileName +"文件夹中",1).show();
}catch(FileNotFoundException e) {
// TODO Auto-generated catch block
Toast.makeText(Cameradome.this,"拍照失败",1).show();
e.printStackTrace();
}catch(IOException e) {
// TODO Auto-generated catch block
Toast.makeText(Cameradome.this,"拍照失败",1).show();
e.printStackTrace();
}
Cameradome.this.cam.stopPreview();
Cameradome.this.cam.startPreview();
}
};
private ShutterCallbacksc = new ShutterCallback() {
@Override
publicvoid onShutter() {
// TODO Auto-generated method stub
// 按下快门的操作
}
};
private PictureCallbackpc = new PictureCallback() {
@Override
publicvoid onPictureTaken(byte[] data,android.hardware.Camera camera) {
// TODO Auto-generated method stub
}
};
}
- 学习Android的Camera
- android的camera
- Android Camera的使用
- Android 的camera.setPreviewCallbackWithBuffer和camera.addCallbackBuffer
- Android 的camera.setPreviewCallbackWithBuffer和camera.addCallbackBuffer
- Android的Camera架构介绍
- Android的Camera架构介绍
- Android Camera的编程参考
- Android的Camera系统结构
- Android的Camera架构介绍
- Android 的Camera架构介绍
- Android的Camera架构简介
- 关于Android Camera的博客
- Android的Camera架构介绍
- Android的Camera架构介绍
- Android的Camera架构介绍
- Android的Camera架构介绍
- Android的Camera架构介绍
- 导航控制器---UINavigationController
- 加密算法比较3DES AES RSA ECC MD5 SHA1等
- html与css经典二级菜单编写2
- hdu 1198Farm Irrigation
- 常用的正则表达式大全
- android的camera
- Java基础----一其他类的总结(一)
- Edittext请求输入法无效的解决方案
- IK Analyzer 2012FF_hf1使用
- HDU 题目分类 很有层级 感觉很好
- 一个码农对软件项目基层人员管理的思考——会议篇
- hdu 1022 Train Problem I
- 学校集训心得 DAY8.13
- Scala练习(十一)