您的位置:首页 > 移动开发 > Android开发

android自定义相机添加自定义水印

2014-06-19 16:11 351 查看
最近做了一个自定义的相机,拍照后自动添加自定义水印图片,并且在预览窗口的右下角显示出来。下面总结一下自定义相机的步骤

一、继承SurfaceHolder.Callback回调接口,实现重载的三个方法,初始化摄像头和预览框:

@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
initCamera();
}
@Override
public void surfaceCreated(SurfaceHolder paramSurfaceHolder) {
try{
this.mCamera = Camera.open();
//this.mCamera.setDisplayOrientation(90);

//在顺时针方向的基础上获取旋转角度
int degrees = getDisplayOritation(getDispalyRotation(), getDefaultCameraId());
mCamera.setDisplayOrientation(degrees);//设置相机预览的旋转角度

this.mCamera.setPreviewDisplay(paramSurfaceHolder);//设置预览所要用的surfaces对象
return;
}catch (IOException localIOException){
this.mCamera.release();
this.mCamera = null;
}
}
@Override
public void surfaceDestroyed(SurfaceHolder arg0) {
stopCamera();
if (this.mCamera != null)
{
this.mCamera.release();
this.mCamera = null;
}
}

二、创建Camera.AutoFocusCallback对象,实现调用mCamera.autoFocus(this.mAutoFocusCallback)这个方法时就能够自动拍照:

private Camera.AutoFocusCallback mAutoFocusCallback = new Camera.AutoFocusCallback(){
public void onAutoFocus(boolean paramBoolean, Camera paramCamera){
MainActivity.this.mCamera.takePicture(MainActivity.this.shutterCallback,
MainActivity.this.rawCallback, MainActivity.this.jpegCallback);
}
};

三、创建onAutoFocus方法中所需的三个对象,获取图片数据:

private Camera.ShutterCallback shutterCallback = new Camera.ShutterCallback(){
public void onShutter(){}
};
private Camera.PictureCallback rawCallback = new Camera.PictureCallback(){
public void onPictureTaken(byte[] paramArrayOfByte, Camera paramCamera){}
};
private Camera.PictureCallback jpegCallback = new Camera.PictureCallback(){
public void onPictureTaken(byte[] paramArrayOfByte, Camera paramCamera){
File pictureFile = MainActivity.this.getOutputMediaFile();
savePicture(pictureFile, paramArrayOfByte);
initCamera();
}
};

四、在PictureCallback对象中的重载方法中获取图像数据,在这里就能够对图像进行一系列操作,如:压缩,加水印等等,然后再初始化摄像头。

设置拍照按钮,在onclick方法中调用autoFocus方法:

private void takePicture(){
if (this.mCamera != null){
this.mCamera.autoFocus(this.mAutoFocusCallback);
}
}

这样一个自定义的相机就完成了,能够实现水印,压缩等功能。项目代码链接:自定义水印相机
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: