使用手机的摄像头进行拍照
2014-06-30 22:42
423 查看
package cn.itcast.camera; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import android.app.Activity; import android.graphics.PixelFormat; import android.hardware.Camera; import android.os.Bundle; import android.os.Environment; 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; import android.widget.Button; import android.widget.Toast; public class DemoActivity extends Activity implements OnClickListener { private SurfaceView sv; private Button bt_take_pic, bt_auto_focus; private SurfaceHolder holder; private Camera camera ; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //隐藏掉activity的标题栏 // 必须写到setcontentview之前 requestWindowFeature(Window.FEATURE_NO_TITLE); //实现窗体的全屏显示 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.main); sv = (SurfaceView) this.findViewById(R.id.sv); bt_take_pic = (Button) this.findViewById(R.id.bt_take_pic); bt_auto_focus = (Button) this.findViewById(R.id.bt_auto_focus); bt_take_pic.setOnClickListener(this); bt_auto_focus.setOnClickListener(this); //得到holder holder = sv.getHolder(); //设置类型 holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); //设置事件 create change destory holder.addCallback(new MyHolderCallback()); } public void onClick(View v) { switch (v.getId()) { case R.id.bt_auto_focus: //自动对焦 camera.autoFocus(null); break; case R.id.bt_take_pic: //拍照 //ShutterCallback // raw 未经过处理的意思 设置的事件是onPictureTaken事件 camera.takePicture(null, null, new MyPicCallback()); break; } } private class MyPicCallback implements Camera.PictureCallback{ public void onPictureTaken(byte[] data, Camera camera) { if(Environment.MEDIA_MOUNTED.equals( Environment.getExternalStorageState())){ try { File file = new File(Environment.getExternalStorageDirectory(),System.currentTimeMillis()+".jpg"); FileOutputStream fos = new FileOutputStream(file); //得到输出流流 将数据写入文件中 fos.write(data); fos.flush(); fos.close(); } catch (Exception e) { Toast.makeText(getApplicationContext(), "保存照片失败", 0).show(); e.printStackTrace(); }finally{ camera.startPreview(); } }else{ Toast.makeText(getApplicationContext(), "sd卡不可用", 0).show(); } } } private class MyHolderCallback implements SurfaceHolder.Callback{ public void surfaceCreated(SurfaceHolder holder) { System.out.println("holder 被创建 "); DemoActivity.this.holder = holder; //得到camara 调用底层的c语言代码,在某个事件内只能被一个应用使用, camera = Camera.open(); // 要想给照相机设置参数 必须要知道你的相机支持什么样子的参数 //System.out.println(camera.getParameters().flatten()); Camera.Parameters parms = camera.getParameters(); //每秒显示多少帧 parms.setPreviewFrameRate(5); parms.setPictureSize(1280, 960); parms.setPictureFormat(PixelFormat.JPEG);//设置照片的输出格式 parms.set("jpeg-quality", 85);//照片质量 camera.setParameters(parms); try { //设置完参数后,给camara设置内容holder camera.setPreviewDisplay(holder); } catch (IOException e) { e.printStackTrace(); }//通过SurfaceView显示取景画面 camera.startPreview();//开始预览 } public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } public void surfaceDestroyed(SurfaceHolder holder) { System.out.println("holder被销毁"); camera.release(); camera = null; } } }
相关文章推荐
- 基于Swift的iOS应用程序开发:使用UIImagePickerController调取摄像头进行拍照
- 3.使用DShow进行摄像头预览并拍照
- AngularJS中使用HTML5手机摄像头拍照
- 使用摄像头进行拍照的步骤
- AngularJS中使用HTML5手机摄像头拍照
- AngularJS中使用HTML5手机摄像头拍照
- 利用Android手机里的摄像头进行拍照
- 使用opencv2在qt界面上进行摄像头采集以及简单的拍照功能
- 利用Android手机里的摄像头进行拍照
- 使用Java调用摄像头进行拍照源码
- 网站建设中使用HTML5实现使用手机摄像头拍照上传的功能
- 使用摄像头进行拍照的步骤
- 微信浏览器内兼容android iOS调取手机摄像头进行拍照、打水印、压缩、预览
- html5实现摄像头拍照并使用java进行照片保存
- 利用Android手机里的摄像头进行拍照
- 如何使用MATLAB进行USB2.0摄像头的编程
- 如何使用XP自带超级终端及蓝牙方式与手机进行AT Command通信
- 利用JMF进行摄像头拍照
- 使用调色板进行手机游戏开发
- 能在Windows CE上运行的的二维码识别系统,使用手机摄像头扫描二维码