自制Camera例子——更改摄像头预览大小
来源:互联网 发布:ps ef grep java 详解 编辑:程序博客网 时间:2024/05/16 05:14
我们仍然通过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);XML://修改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(); }}<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下载
0 0
- 自制Camera例子——更改摄像头预览大小
- 自制Camera例子——相机效果
- 自制Camera例子——捕获和保存图片
- 底层驱动更改camera预览大小(rk)
- Android——camera摄像头
- android camera 摄像头预览画面变形
- 自制打印预览界面,获取纸张大小
- 多媒体编程——摄像头录像预览
- 多媒体编程——摄像头录像预览
- Android之Camera预览过程中插拔摄像头节点后移
- android通过camera和surfaceview选择摄像头并即时预览
- Android camera预览参数以及实际图像大小设置
- Android 实时视频采集—Camera预览采集
- Android 实时视频采集—Camera预览采集
- 【流媒體】Android 实时视频采集—Camera预览采集
- PhoneGap API中文帮助文档——Camera (摄像头)
- Androi学习:Camera初探——控制摄像头拍照
- Android开发:Camera初探——控制摄像头拍照
- liunx 编程常用命令(expand,grep ,find )
- git init 和 git init –bare
- 物理内存不够,使用交换内存
- iOS 多线程篇1—多线程简单介绍
- [Linux] 串口调试工具 Minicom 详细介绍
- 自制Camera例子——更改摄像头预览大小
- linux 下 PHP 环境搭建(已测试)
- Git速成
- JavaScript学习--Item18 JScript的Bug与内存管理
- iOS证书配置常见错误
- tomcat启动异常:IOException while loading persisted sessions: java.io.EOFException
- if()return;的一点小问题
- oracle-序列 ora-02287 此处不允许序号
- PHP 模糊搜索