当前位置: 代码迷 >> Android >> Android开发片断–调用系统相机拍照
  详细解决方案

Android开发片断–调用系统相机拍照

热度:78   发布时间:2016-05-01 19:29:52.0
Android开发片段–调用系统相机拍照

初始化相机

?

private void initCamera() {		setContentView(R.layout.main);		btnTake = (Button) this.findViewById(R.id.take);		btnTake.setOnClickListener(new OnClickListener() {			@Override			public void onClick(View v) {				camera.autoFocus(new AutoFocusCallback());			}		});		Display display = getWindowManager().getDefaultDisplay();		surfaceView = (SurfaceView) this.findViewById(R.id.mSurfaceView1);		surfaceView.getHolder().setFixedSize(display.getWidth(),				display.getHeight()); // 设置分辨率		/* 下面设置Surface不维护自己的缓冲区,而是等待屏幕的渲染引擎将内容推送到用户面前 */		surfaceView.getHolder()				.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);		surfaceView.getHolder().addCallback(new SurfaceCallback());	}

?

回调函数类

?private final class SurfaceCallback implements SurfaceHolder.Callback {

		@Override		public void surfaceChanged(SurfaceHolder holder, int format, int width,				int height) {		}		@Override		public void surfaceCreated(SurfaceHolder holder) {			try {				camera = Camera.open();				Camera.Parameters parameters = camera.getParameters();				// parameters.setPreviewSize(1024, 768);//设置预览照片的大小				// parameters.setPreviewFrameRate(3);//每秒3帧				parameters.setPictureFormat(PixelFormat.JPEG);// 设置照片的输出格式				parameters.set("jpeg-quality", quality);// 照片质量				parameters.setPictureSize(photoWidth, photoHeight);// 设置照片的大小				parameters.set("orientation", "landscape");				// parameters.set("orientation", "portrait");				// parameters.set("rientation", "90");				// camera.setDisplayOrientation(90);				// parameters.set("rotation", "180");				// parameters.set("orientation", "landscape");				parameters.setRotation(180);				camera.setParameters(parameters);				camera.setPreviewDisplay(surfaceView.getHolder());// 通过SurfaceView显示取景画面				camera.startPreview();// 开始预览				preview = true;			} catch (IOException e) {				Log.e(TAG, e.toString());			}		}		@Override		public void surfaceDestroyed(SurfaceHolder holder) {			if (camera != null) {				if (preview)					camera.stopPreview();				camera.release();			}		}	}

?自动对焦

private final class AutoFocusCallback implements Camera.AutoFocusCallback {		@Override		public void onAutoFocus(boolean success, Camera camera) {			camera.takePicture(null, null, new TakePictureCallback());		}	}

?拍照保存

private final class TakePictureCallback implements PictureCallback {		@Override		public void onPictureTaken(byte[] data, Camera camera) {			try {				Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0,						data.length);				File file = new File(temPath);				FileOutputStream outStream = new FileOutputStream(file);				// Bitmap 旋转				Matrix vMatrix = new Matrix();				vMatrix.setRotate(270);				Bitmap vB2 = Bitmap.createBitmap(bitmap, 0, 0, bitmap						.getWidth() // 宽度						, bitmap.getHeight() // 高度						, vMatrix, true);				vB2.compress(CompressFormat.JPEG, 100, outStream);				outStream.close();				camera.stopPreview();				// savePhoto();				setReview();			} catch (Exception e) {				Log.e(TAG, e.toString());			}		}	}
?
  相关解决方案