水印相机是自定义相机的一种,实现方法有很多,我看了很多别人的做的很漂亮,我做的就很普通了,不过总算是实现了拍照加水印的功能。
我这边用到了SurfaceView,有人没用这个也做出来水印相机,个人觉得还是SurfaceView更方便一点(不接受反驳)。
先看看效果:
效果图
原图太大,我做了压缩,所以动图显得模糊。
第一步,我们想一进入就打开相机预览,这个怎么做呢?
相机功能由android.hardware.Camera类实现,但是需要有一个预览载体,这里就用SurfaceView,而且需要辅助类SurfaceHolder,首先,我们的 Activity 要实现SurfaceHolder.Callback接口:
public class WaterCameraActivity extends AppCompatActivity implements SurfaceHolder.Callback
第二步,关联SurfaceHolder:
private SurfaceView mSv;
private SurfaceHolder mSurfaceHolder;
mSurfaceHolder = mSv.getHolder();
mSurfaceHolder.setKeepScreenOn(true);
mSurfaceHolder.setFormat(PixelFormat.TRANSPARENT);
mSurfaceHolder.addCallback(this);
// 为了实现照片预览功能,需要将SurfaceHolder的类型设置为PUSH,这样画图缓存就由Camera类来管理,画图缓存是独立于Surface的
mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
实现SurfaceHolder.Callback接口有三个方法需要重写:
@Override
public void surfaceCreated(SurfaceHolder holder) {
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
只要SurfaceView显示,就会调用surfaceCreated(),不显示就会调用surfaceDestroyed()。因此可以在surfaceCreated()中初始化相机,并展示预览界面;在surfaceDestroyed()中释放相机资源。
第三步,初始化相机
mCamera = Camera.open(0);//0-后摄像头,1-前摄像头
Camera.getCameraInfo(0, cameraInfo);
Camera.Par
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/105309.html