Android中使用Camera
2015-07-09 17:56
591 查看
1.使用surfaceView来预览。
2.调用Camera来设置相机。
3.设置camera的参数。
看下面的例子:
2.调用Camera来设置相机。
3.设置camera的参数。
看下面的例子:
//设置surfaceView不需要自己维护缓冲区 surfaceView_image_show.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); //获取surfaceView的SurfaceHolder surfaceHolder = surfaceView_image_show.getHolder(); //为surfaceHolder添加一个回调监听器 surfaceHolder.addCallback(new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder holder) { initCamera(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { //如果camera不为空,释放摄像头 if(camera != null){ if(isPreview){ camera.stopPreview(); } camera.release(); camera = null; } } }); } //初始化摄像头 private void initCamera(){ //如果没有预览 if(!isPreview){ camera = Camera.open(0);//打开后置摄像头 camera.setDisplayOrientation(90); } if(camera != null && !isPreview){ //设置Camera的参数 Camera.Parameters parameters = camera.getParameters(); parameters.setPreviewSize(screenWidth,screenHeight);//设置预览照片大小 parameters.setPreviewFpsRange(4, 10);//预览照片每秒显示多少帧的最小值和最大值 parameters.setPreviewFormat(ImageFormat.JPEG);//设置图片格式 parameters.set("jpeg-quality", 85);//设置JPG照片的质量 parameters.setPictureSize(screenWidth, screenHeight);//设置图片大小 try { camera.setPreviewDisplay(surfaceHolder);//通过SurfaceView显示取景画面 } catch (IOException e) { e.printStackTrace(); } camera.startPreview();//开始预览 isPreview = true; } } //控制摄像头自动对焦 public void capture(View view){ if(camera != null){ //控制摄像头自动对焦后才拍照 camera.autoFocus(new Camera.AutoFocusCallback() { @Override public void onAutoFocus(boolean success, Camera camera) { if(!success){ camera.takePicture(new Camera.ShutterCallback() { @Override public void onShutter() { //按下快门会执行此处代码 } }, new Camera.PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { //此处代码可以决定是否需要保存原始照片信息 } }, new Camera.PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { //根据拍照所取得的数据创建位图 final Bitmap bm = BitmapFactory.decodeByteArray(data, 0, data.length); View view = getLayoutInflater().inflate(R.layout.save_camera_img, null); ImageView camera_img = (ImageView)view.findViewById(R.id.ImageView_camera_showimg); camera_img.setImageBitmap(bm); AlertDialog.Builder dialog = new AlertDialog.Builder(CameraActivity.this) .setView(view) .setNegativeButton("取消", null) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //跳转到图片编辑界面,并将该Bitmap对象传过去 File file = new File(Environment.getExternalStorageDirectory(), UUID.randomUUID().toString()+".jpg"); try { FileOutputStream fos = new FileOutputStream(file); bm.compress(Bitmap.CompressFormat.JPEG,100,fos); fos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } Intent intent = new Intent(CameraActivity.this, EditCameraImgActivity.class); intent.putExtra("cameraImgPath",file.getAbsolutePath()); CameraActivity.this.startActivity(intent); CameraActivity.this.finish(); } }); dialog.create().show(); camera.stopPreview(); camera.startPreview(); isPreview = true; } }); } } }); } }
相关文章推荐
- android开发环境配置(使用Android Studio)
- 【第三篇】学习 android 事件总线androidEventbus之发布事件,子线程中接收
- WebView与JavaScript交互--Android
- android 代码中实现动画效果
- android 获取屏幕大小
- android addJavascriptInterface 不能生效 解决办法
- Android中背景选择器
- Macos Coco2d-x Android开发
- Android SDK中的Support兼容包详解
- Android小知识8
- Android中ShareUserId注意问题
- Android studio第一次导入项目遇到的问题,和解决方案
- Android实例-调用GOOGLE的TTS实现文字转语音(XE7+小米2)
- Android中获取不同语言目录下的字符串
- Android之找回打包key密码的方法
- 安卓实现序列化之Parcelable接口
- android基础学习之正则表达式词典
- Android----SpannableString
- Android中的Thread与AsyncTask的区别
- Android 布局之GridLayout