android 调起摄像头预览
2016-12-29 16:38
239 查看
public class MainActivity extends Activity implements Camera.PreviewCallback {
private static final String TAG = “MainActivity”;
private boolean isOpen;
private Camera mCamera;
private static final int width = 400;
private static final int height = 300;
private ByteArrayOutputStream jpegOutputSteam = new ByteArrayOutputStream();
ImageView iv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.e(“MainActivity”, “onCreate: hello world”);
iv = new ImageView(this);
getWindow().addContentView(iv, new ViewGroup.LayoutParams(width, height));
}
private static final String TAG = “MainActivity”;
private boolean isOpen;
private Camera mCamera;
private static final int width = 400;
private static final int height = 300;
private ByteArrayOutputStream jpegOutputSteam = new ByteArrayOutputStream();
ImageView iv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.e(“MainActivity”, “onCreate: hello world”);
iv = new ImageView(this);
getWindow().addContentView(iv, new ViewGroup.LayoutParams(width, height));
} public void onClickMenu(View view) { Log.e(TAG,"startCamera"); new Thread() { @Override public void run() { startCamera(); } }.start(); } public void startCamera() { Log.i(TAG, "startCamera: ***************************************************"); if (isOpen) return; else isOpen = true; try { mCamera = Camera.open(0); Camera.Parameters parameters = mCamera.getParameters(); parameters.setPreviewSize(width, height); // parameters.setPreviewFrameRate(11); mCamera.setParameters(parameters); mCamera.startPreview(); // recorder.start(); mCamera.setPreviewCallback(this); // mCamera.setPreviewDisplay(holder); } catch (Exception e) { Log.w(TAG, "startCamera: ", e); stopCamera(); } } public void stopCamera() { if (!isOpen) return; if (null != mCamera) { try { mCamera.stopPreview(); mCamera.release(); mCamera = null; } catch (Exception e) { Log.e(TAG, "stopCamera: ", e); } } System.gc(); Log.i(TAG, "stopCamera: ***************************************************"); } public boolean isOpen() { return isOpen; } @Override public void onPreviewFrame(byte[] bytes, Camera camera) { try { byte[] jpeg = getJpeg(bytes); Log.i(TAG, "onPreviewFrame show jpeg...."); Bitmap bitmap = BitmapFactory.decodeByteArray(jpeg, 0, jpeg.length); iv.setImageBitmap(bitmap); } catch (Exception e) { Log.w(TAG, "onPreviewFrame: ", e); } } /** * 将原始相机预览帧,转换成jpeg图片格式的byte[] * * @param bytes 原始相机预览帧 * @return jpeg图片格式的byte[] * @throws IOException jpegOutputSteam.write(); */ private byte[] getJpeg(byte[] bytes) throws IOException { jpegOutputSteam.reset(); YuvImage image = new YuvImage(bytes, ImageFormat.NV21, width, height, null); //ImageFormat.NV21 640 480 image.compressToJpeg(new Rect(0, 0, image.getWidth(), image.getHeight()), 100, jpegOutputSteam); // 将NV21格式图片,以质量70压缩成Jpeg,并得到JPEG数据流 return jpegOutputSteam.toByteArray(); }
}
相关文章推荐
- Android开发:巧用延迟实现欢迎界面 及 摄像头预览后绘制背景标示(如坐标系、矩形框)
- Android调用系统摄像头--使用MediaRecorder--1--预览(preview)功能
- Android自定义照相机 预览拍照 切换前后置摄像头
- Android摄像头:只拍摄SurfaceView预览界面特定区域内容(矩形框)---完整(原理:底层SurfaceView+上层绘制ImageView)
- Android自定义照相机 预览拍照 切换前后置摄像头
- Android调用系统摄像头--使用MediaRecorder--1--预览(preview)功能
- Android调用JNI的进阶实例(摄像头预览数据转码RGB播放)
- Android系统Camera参数设置&&Android之Camera拍照 && Android之Camera预览过程中插拔摄像头节点后移
- Android自定义照相机 预览拍照 切换前后置摄像头
- Opencv For Android: 如何显示摄像头预览
- Android摄像头预览界面上画线
- Android Camera开发:给摄像头预览界面加个ZoomBar(附完整代码下载)
- Android自定义照相机 预览拍照 切换前后置摄像头
- Android 实例讲解自定义Camera拍照和预览以及前后置摄像头切换
- android调用摄像头偷拍demo 无声 无预览 一件拍照存储
- Android摄像头:只拍摄SurfaceView预览界面特定区域内容(矩形框)---完整实现(原理:底层SurfaceView+上层绘制ImageView)
- Android自定义照相机 预览拍照 切换前后置摄像头
- Android之Camera预览过程中插拔摄像头节点后移
- Android自定义照相机 预览拍照 切换前后置摄像头
- Android自定义照相机 预览拍照 切换前后置摄像头