Androidカスタムカメラカスタム透かしを追加


最近、カスタムカメラを作りました.写真を撮った後、自動的にカスタム透かし画像を追加し、プレビューウィンドウの右下隅に表示します.カスタムカメラの手順をまとめます
一、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);
	    }
	}

このようなカスタムカメラが完成し、透かし、圧縮などの機能を実現することができます.プロジェクトコードリンク:カスタムウォーターマークカメラ