自制Camera例子——更改摄像头预览大小
2016-05-30 11:36
399 查看
我们仍然通过Camera.Parameters去修改摄像头的属性。
parameter.setPreviewSize(w,h) 去修改显示大小。
注意:里面的w,h并不是随意书写的,也是要手机的相机支持才行。否则重置parameter的时候会失败。所以我们在修改Camera显示大小的时候,还是要首先获取当前手机所支持的显示大小列表列表,然后再从列表中遍历获取跟我们指定大小最合适(根据需求而定)的一组值就可以了。
MainActivity:
public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback { //Camera显示最大宽度 public static final int MAX_W = 200; //Camera显示最大高度 public static final int MAX_H = 200; private SurfaceView camera_view; private Camera camera; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } }); camera_view = (SurfaceView) findViewById(R.id.camera_view); SurfaceHolder holder = camera_view.getHolder(); holder.addCallback(this); } @Override public void surfaceCreated(SurfaceHolder holder) { camera = Camera.open(); try { Camera.Parameters parameters = camera.getParameters(); //设置显示试图,显示视图 if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) { //设置相机方向,钟祥 parameters.set("orientation", "portrait"); camera.setDisplayOrientation(90); //对于Android 2.2及以上版本 parameters.setRotation(90); } else { //横向 parameters.set("orientation", "landscape"); camera.setDisplayOrientation(0); //对于Android 2.2及以上版本 parameters.setRotation(90); } //设置Carema显示大小 //当前最适合的宽度 int bestW = 0; //当前最适合的高度 int bestH = 0; //获取相机所有支持的显示大小列表 List<Camera.Size> sizes = parameters.getSupportedPreviewSizes(); if (sizes != null && sizes.size() > 0) { Iterator<Camera.Size> cel = sizes.iterator(); while (cel.hasNext()) { Camera.Size size = cel.next(); /** * 根据需求修改最合适的款、高 * 这里选择的是:当前大小大于最佳大小,但小于设定的上限就修改 */ if (size.width > bestW && size.width < MAX_W && size.height > bestH && size.height < MAX_H) { bestW = size.width; bestH = size.height; } } } //当最佳值都不为0的时候,修改显示大小 if (bestW != 0 && bestH != 0) { parameters.setPreviewSize(bestW, bestH);
//修改SurfaceView显示视图大小 ViewGroup.LayoutParams params = camera_view.getLayoutParams(); params.width = bestW; params.height = bestH; camera_view.setLayoutParams(params);} camera.setParameters(parameters); camera.setPreviewDisplay(holder); } catch (Exception e) { camera.release(); e.printStackTrace(); } camera.startPreview(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { camera.stopPreview(); ; camera.release(); camera = null; } @Override protected void onDestroy() { if (camera != null) { camera.stopPreview(); camera.release(); camera = null; } super.onDestroy(); }}XML:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context="com.example.my.camerademo.MainActivity" tools:showIn="@layout/activity_main"> <SurfaceView android:id="@+id/camera_view" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout>
Demo下载
相关文章推荐
- C#实现控制摄像头的类
- camera录制视频的缩略图获取原理心得分享
- android系统在静音模式下关闭camera拍照声音的方法
- Android 开发随手笔记之使用摄像头拍照
- C#实现调用本机摄像头实例
- Android变形(Transform)之Camera使用介绍
- Android编程中调用Camera时预览画面有旋转问题的解决方法
- android之camera用法实例详解
- Android中使用Camera类编写手机拍照App的实例教程
- Android Camera是否支持变焦的判断方法总结
- Android利用Camera实现中轴3D卡牌翻转效果
- unity3d调用手机或电脑摄像头
- AngularJS中使用HTML5手机摄像头拍照
- Python中使用摄像头实现简单的延时摄影技术
- Camera Framework学习笔记(1)
- Linux下使用V4L2读取获取拍照(获取静态图像)
- Linux系统中如何正确安装摄像头驱动
- 深入挖掘手机摄像头的潜力
- LG G3截图曝光 界面采用扁平化设计风格
- 三星GALAXY S5内部拆解 史上零件最少