Android自定义相机(一)

前言

关于Android相机,或者图像处理的内容,如果只是预览图像,拍摄照片的话,那么谷歌给我们提供了很多api可以让我们轻松完成这些简单的功能,但是如果想要深入研究的话,图像处理又是非常复杂的一块内容,作为一只安卓小菜鸡,当然要从最简单的地方入手了,来自定义一个最简单的相机。

1、使用Android相机的两种方式

Android系统提供了两种使用手机相机资源实现拍摄功能的方法,一种是直接通过Intent调用系统相机组件,这种方法快速方便,适用于直接获得照片的场景,如上传相册,微博、朋友圈发照片等。

//启动一个Activity,返回时携带一个bitmap数据
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);  
startActivityForResult(intent, CASE_CAMERA);  

//返回的数据
@Override  
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == Activity.RESULT_OK) {  
        if (requestCode == CASE_CAMERA) {  
            Bundle extras = data.getExtras();  
            // 获取图片信息  
            Bitmap bitmap = (Bitmap) extras.get("data");
        }
    }
} 

另一种是使用相机API来定制自定义相机,这种方法适用于需要定制相机界面或者开发特殊相机功能的场景,如需要对照片做裁剪、滤镜处理,添加贴纸,表情,地点标签等。

(一)使用API来控制相机我们需要用到关键类和接口:

①、使用Camera对象来控制相机 使用SurfaceView来展现照相机采集的图像
②、通过surfaceholder来控制surfac的尺寸和格式,修改surface的像素,监视surface的变化等等
③、通过SurfaceHolder.Callback 接口,监听surface状态变化

(二)Camera控制拍照的过程

①、调用Camera的open()方法打开相机。
②、调用Camera的getParameters()获取拍照参数,该方法返回一个Cmera.Parameters对象。
③、调用Camera.Parameters对象对照相的参数进行设置。
④、调用Camera的setParameters(),并将Camera.Parameters对象作为参数传入,这样就可以对拍照进行参数控制,Android2.3.3以后不用设置。
⑤、调用Camerade的startPreview()的方法开始预览取景,在之前需要调用Camera的setPreviewDisplay(SurfaceHolder holder)设置使用哪个SurfaceView来显示取得的图片。
⑥、调用Camera的takePicture()方法进行拍照。
⑦、程序结束时,要调用Camera的stopPreview()方法停止预览,并且通过Camera.release()来释放资源。

(更多Api相关的内容可以参考一下Android相机开发那些坑

2、代码实现

简单的理论说完,现在来着手做一个最简单的能够预览,拍照,保存照片的自定义相机吧。

(一)首先我们要先实现相机的预览界面,快速刷新的surfaceview自然是最好的选择

public class CameraSurfaceView extends SurfaceView implements         SurfaceHolder.Callback,Camera.AutoFocusCallback {
   
    private static final String TAG = "CameraSurfaceView";
    private Context mContext;
    private 
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值