Androidカスタムカメラカスタム透かしを追加
最近、カスタムカメラを作りました.写真を撮った後、自動的にカスタム透かし画像を追加し、プレビューウィンドウの右下隅に表示します.カスタムカメラの手順をまとめます
一、Surface Holderを継承する.Callbackコールバックインタフェース、リロードの3つの方法を実現し、カメラとプレビューボックスを初期化します.
二、Cameraを作成するAutoFocusCallbackオブジェクト、mCamera呼び出しを実現AutoFocus(this.mAutoFocusCallback)この方法では、自動的に写真を撮ることができます.
三、onAutoFocusメソッドで必要な3つのオブジェクトを作成し、画像データを取得する.
四、PictureCallbackオブジェクトのリロード方法で画像データを取得し、ここで画像を圧縮、透かしなどの一連の操作を行い、カメラを初期化することができる.
写真ボタンを設定し、onclickメソッドでautoFocusメソッドを呼び出します.
このようなカスタムカメラが完成し、透かし、圧縮などの機能を実現することができます.プロジェクトコードリンク:カスタムウォーターマークカメラ
一、Surface Holderを継承する.Callbackコールバックインタフェース、リロードの3つの方法を実現し、カメラとプレビューボックスを初期化します.
@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メソッドで必要な3つのオブジェクトを作成し、画像データを取得する.
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);
}
}
このようなカスタムカメラが完成し、透かし、圧縮などの機能を実現することができます.プロジェクトコードリンク:カスタムウォーターマークカメラ