android 简单照相机
来源:互联网 发布:民谣 知乎 编辑:程序博客网 时间:2024/05/01 18:17
MyCameraDemo.javaandroid简单照相机的实现Camera操作类及SurfaceView捕获图像组件package org.lxh.demo;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.SurfaceHolder;import android.view.SurfaceView;import android.view.View;import android.view.View.OnClickListener;import android.view.WindowManager;import android.widget.Button;import android.widget.Toast;public class MyCameraDemo extends Activity {private SurfaceView surfaceview=null;private Button button=null;private Camera camera=null;private SurfaceHolder holder=null;//定义一个摄像头资源捕获图像被销毁的时间private boolean previewRunTime=true;//@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);super.setContentView(R.layout.main);this.surfaceview=(SurfaceView)super.findViewById(R.id.surface);this.button=(Button)super.findViewById(R.id.but);this.holder=this.surfaceview.getHolder();this.holder.addCallback(new MySurfaceViewCallback());this.holder.setFixedSize(500, 350);//捕获范围this.button.setOnClickListener(new OnClickListenerImpl());}/** * 拍照 * @author yuhang * */private class OnClickListenerImpl implements OnClickListener{@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubif(MyCameraDemo.this.camera!=null){MyCameraDemo.this.camera.autoFocus(new MyAutoFocusCallback());//实现自动对焦功能}}}/** * 预览 * @author yuhang * */private class MySurfaceViewCallback implements SurfaceHolder.Callback{@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {// TODO Auto-generated method stub}//@Overridepublic void surfaceCreated(SurfaceHolder holder) {// TODO Auto-generated method stubMyCameraDemo.this.camera.open();//取得第一个摄像头/**To create windows on a different display, * you need to obtain a WindowManager for that Display. * * Returns * The display that this window manager is managing. */WindowManager manager=(WindowManager)MyCameraDemo.this.getSystemService(Context.WINDOW_SERVICE);Display display=manager.getDefaultDisplay();//Provides information about the size and density of a logical display.Parameters param=MyCameraDemo.this.camera.getParameters();param.setPreviewSize(display.getWidth(), display.getHeight());param.setPreviewFrameRate(5);//一秒5针param.setPictureFormat(PixelFormat.JPEG);//图片形式param.set("jpen-quality",80);//图片质量MyCameraDemo.this.camera.setParameters(param);try {MyCameraDemo.this.camera.setPreviewDisplay(MyCameraDemo.this.holder);//设置预览} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}MyCameraDemo.this.camera.startPreview();//进行预览的功能MyCameraDemo.this.previewRunTime=true;//已经开始预览}//@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {// TODO Auto-generated method stubif(MyCameraDemo.this.camera!=null){//摄像头资源没释放if(MyCameraDemo.this.previewRunTime){MyCameraDemo.this.camera.stopPreview();//停止预览MyCameraDemo.this.previewRunTime=false;}MyCameraDemo.this.camera.release();//释放摄像头资源}}}/** * 只有对焦成功才能进行拍照并保存 * @author yuhang * */private class MyAutoFocusCallback implements AutoFocusCallback{@Overridepublic void onAutoFocus(boolean success, Camera camera) {// TODO Auto-generated method stubif(success){//Callback interface used to signal the moment of actual image capture.MyCameraDemo.this.camera.takePicture(shutter, pc, jpgcall);}}}/** * 照完照片后的处理操作.进行图像的保存 */private Camera.PictureCallback jpgcall=new PictureCallback() {@Override//保存图片。把byte数组中的内容变成Bitmap图片。jpegpublic void onPictureTaken(byte[] data, Camera camera) {// TODO Auto-generated method stubBitmap bmp=BitmapFactory.decodeByteArray(data, 0, data.length);/** * 图片的自动命名 */String fileName=Environment.getExternalStorageDirectory().toString()+File.separator+"mlphoto"+File.separator+"ML_"+System.currentTimeMillis()+".jpg";File file=new File(fileName);//如果file这个文件夹不存在,新建if(!file.getParentFile().exists()){file.getParentFile().mkdir();//创建文件夹}/** * Most clients will use output streams that write data to the file system (FileOutputStream), * the network (getOutputStream()/getOutputStream()), or to an in-memory byte array * (ByteArrayOutputStream). * * Most clients should wrap their output stream with BufferedOutputStream. */try {BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(file));bmp.compress(Bitmap.CompressFormat.JPEG, 80, bos);//向缓冲区之中压缩图片bos.flush();bos.close();Toast.makeText(MyCameraDemo.this, "拍照成功已保存在"+fileName+"文件中", Toast.LENGTH_SHORT).show();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}//为下一次拍照准备MyCameraDemo.this.camera.stopPreview();MyCameraDemo.this.camera.startPreview();}};private Camera.ShutterCallback shutter=new ShutterCallback() {//@Overridepublic void onShutter() {// TODO Auto-generated method stub//按下快门之后进行的操作}};private Camera.PictureCallback pc=new PictureCallback() {//@Overridepublic void onPictureTaken(byte[] data, Camera camera) {// TODO Auto-generated method stub}};}
Manifest.xml
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="org.lxh.demo" android:versionCode="1" android:versionName="1.0"><uses-sdk android:minSdkVersion="10" /><application android:icon="@drawable/icon" android:label="@string/app_name"><activity android:name=".MyCameraDemo" android:label="@string/app_name"android:screenOrientation="landscape"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application><uses-feature android:name="android.hardware.camera" /><uses-feature android:name="android.hardware.camera.autofocus" /><uses-permission android:name="android.permission.CAMERA" /><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /></manifest>
main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="fill_parent"android:layout_height="fill_parent"><Buttonandroid:id="@+id/but" android:layout_width="fill_parent"android:layout_height="wrap_content" android:text="照相" /><SurfaceViewandroid:id="@+id/surface"android:layout_width="fill_parent"android:layout_height="fill_parent" /> </LinearLayout>
0 0
- android 简单照相机
- android照相机简单实例
- android调用照相机简单demo
- Android 开发一个简单的照相机程序
- Android照相机
- Android 照相机
- android照相机
- android调用照相机拍照获取照片并做简单剪裁
- android调用照相机拍照获取照片并做简单剪裁
- android调用照相机拍照获取照片并做简单剪裁
- android调用照相机拍照获取照片并做简单剪裁
- 实现简单的照相机
- Android调用系统照相机
- Android播放照相机声音
- Android Camera照相机
- [Android]照相机范例代码
- Android 照相机打开方法
- android camera 照相机/摄像机
- POJ 1195 Mobile phones (二维树状数组)
- Surciata源码分析之IpsNFQ模式(1)
- win7下VS2013设置OpenGL环境
- SVN源码服务器搭建-详细教程
- linux内核线程的创建与销毁
- android 简单照相机
- poj1860解题报告
- Memcache的部署和使用
- 33个训练大脑的小方法
- linguist国际化问题
- 短信监听,自动获短信取验证码
- OpenCV中与matlab中相对应的函数
- 使用CREST测试 前对多文件程序的 Instrumentation 方法
- FFmpeg 给视频增加黑边