关于降低android手机摄像头预览分辨率

假设现在有这样一个需求需要一直开着手机摄像头 但是不做任何拍照动作

但是每个手机的相机分辨率都不同

而默认预览的时候参数是最大分辨率 这样有时候就回导致电量损耗的加快

所以我们可以采取降低相机分辨率的方法 这样既达到了目标 又节省了电量

  1 package com.example.camerbatterytest;
  2
  3
  4 import java.io.IOException;
  5 import java.util.List;
  6
  7 import android.app.Activity;
  8 import android.graphics.PixelFormat;
  9 import android.hardware.Camera;
 10 import android.hardware.Camera.Size;
 11 import android.os.Bundle;
 12 import android.util.Log;
 13 import android.view.Menu;
 14 import android.view.MenuItem;
 15 import android.view.SurfaceHolder;
 16 import android.view.SurfaceView;
 17 import android.widget.Button;
 18
 19 public class CamerActivity extends Activity implements SurfaceHolder.Callback{
 20
 21     Button takephoto;//未实现
 22     private SurfaceView mySurfaceView;
 23     private SurfaceHolder mysurfaceHolder;
 24     Camera camera;//5.0以后这个camera已经不推荐使用
 25     @Override
 26     protected void onCreate(Bundle savedInstanceState) {
 27         super.onCreate(savedInstanceState);
 28         setContentView(R.layout.activity_camer);
 29         takephoto=(Button)findViewById(R.id.takephoto);
 30         mySurfaceView = (SurfaceView) findViewById(R.id.surfaceView1);
 31         mysurfaceHolder=mySurfaceView.getHolder();
 32         mysurfaceHolder.addCallback(this);
 33
 34     }
 35     @Override
 36     public void surfaceCreated(SurfaceHolder holder) {
 37         Log.d("huang","surfaceCreated");
 38         camera = Camera.open();
 39
 40     }
 41     @Override
 42     public void surfaceChanged(SurfaceHolder holder, int format, int width,
 43             int height) {
 44         Log.d("huang","surfaceview width="+width+" and height="+height);
 45         Camera.Parameters parameters = camera.getParameters();
 52         Camera.Size bestSize=getBestPreviewSize(width,height,parameters);
 53         parameters.setPreviewSize(bestSize.width, bestSize.height); 55         camera.setParameters(parameters);
 56
 57         try {
 58             camera.setPreviewDisplay(mysurfaceHolder);
 59         } catch (IOException e) {
 60             e.printStackTrace();
 61         }
 62         camera.setDisplayOrientation(90);//显示的方向旋转角度
 63         camera.startPreview();
 64
 65     }
 66     @Override
 67     public void surfaceDestroyed(SurfaceHolder holder)
 68     {
 69         Log.d("huang","surfaceDestroyed");
 70             if (camera != null)
 71             {
 72                 camera.stopPreview();
 73                 camera.release();
 74             }
 75
 76     }
 77
 78       private Camera.Size getBestPreviewSize(int surfaceViewWidth, int surfaceViewHeight, Camera.Parameters parameters) {
 79             Camera.Size bestSize=null;
 80         //不同机器 尺寸大小排序方式不一样  有的从小到大有的从大到小
 81             for (Camera.Size size : parameters.getSupportedPreviewSizes())
 82             {
 83               if (size.width <= surfaceViewWidth && size.height <= surfaceViewHeight)
 84               {
 85                 if (bestSize == null) //初始化一个值
 86                     bestSize=size;
 87                 else
 88                 {
 89                   int tempArea=bestSize.width * bestSize.height;
 90                   int newArea=size.width * size.height;
 91
 92                   if (newArea > tempArea) //取满足条件里面最大的
 93                       bestSize=size;
 94                 }
 95               }
 96             }
 97
 98             return bestSize;
 99           }
100
101
102
103 }

主要是

getBestPreviewSize()方法获得了最合适的分辨率 即既小于当前surfaceview的width height又取支持分辨率里面最大的
时间: 2024-10-27 05:44:29

关于降低android手机摄像头预览分辨率的相关文章

MTK 平台上查询当前使用的摄像头模组及所支持预览分辨率

1,MTK 平台如何查询当前使用的是哪颗摄像头及相关的模组信息? 在该目录下可以查到当前平台及相关项目的配置文件 ProjectConfig.mk \ALPS.JB.MP.V1_W_20120919\mediatek\config\project**\ 该文件中配置了当前项目中使用的硬件芯片等信息 //如这个是指收音机所使用的芯片信息 CUSTOM_HAL_FMRADIO = mt6628 //下面这个是指当前项目所采用的 ROM 芯片CUSTOM_HAL_EEPROM=IMX111OTP_EE

Android开发:实时处理摄像头预览帧视频------浅析PreviewCallback,onPreviewFrame,AsyncTask的综合应用(转)

原文地址:http://blog.csdn.net/yanzi1225627/article/details/8605061# 很多时候,android摄像头模块不仅预览,拍照这么简单,而是需要在预览视频的时候,能够做出一些检测,比如最常见的人脸检测.在未按下拍照按钮前,就检测出人脸然后矩形框标示出来,再按拍照.那么如何获得预览帧视频么? 只需要在Activity里继承PreviewCallback这个接口就行了.示例如下: public class RectPhoto extends Acti

Android手势识别 Camera 预览界面上显示文字 布局注意事项(merge布局)

通常在Surfaceview作为预览视频帧的载体,有时需在上面显示提示文字.以前我弄的都好好的,今天忽然发现叠加的TextView不管咋弄都出不来文字了,跟Surfaceview一起放在FrameLayout也不行,后来想到merge布局,发现也不行.大爷的,奇了怪了,最后发现了原因,原来是顺序问题.也即无论是在RelativeLayout里还是merge布局里,View是逐个叠加上去的,一层一层铺上去的.如果你先放TextView在最前面,那肯定被后面的全屏Surfaceview覆盖了.用常规

如何获取和安装Android L开发者预览版

周三谷歌推出下一个流行的移动操作系统Android L.但是只提供了简单地预览版本,稍后将提供一个开发者预览版,完整版计划在今年秋天发布. 下面我们一起来看看如何下载和安装. 在你安装AndroidL开发者预览版之前,你需要知道的几件事情: 1.此版本是不稳定的,不建议在你的常用设备上使用: 2.加载过程不是很简单,你需要借助于命令行工具并且具有错误排除能力. Google已经在下载页面和系统启动页面提示了,此次开发者预览版只适合 Nexus 5 和Nexus 7 而且不需要开发者账号. 下载系

ORB-SLAM2 运行 —— ROS + Android 手机摄像头

转载请注明出处,谢谢 原创作者:Mingrui 原创链接:https://www.cnblogs.com/MingruiYu/p/12404730.html 本文要点: ROS 配置安装 解决 sudo rosdep init 报错 Website may be down. ORB-SLAM2 ROS 配置安装 解决报错 DSO missing from command line Android 手机摄像头与 PC 进行基于 ROS 的通信 手机摄像头标定 采集标定图像 OpenCV sampl

Android自定义照相机 预览拍照 切换前后置摄像头

Android提供了Camera来控制拍照,步骤如下:(1)调用Camera的open()方法打开相机.(2)调用Camera的getParameters()获取拍照参数,该方法返回一个Cmera.Parameters对象.(3)调用Camera.Parameters对象对照相的参数进行设置.(4)调用Camera的setParameters(),并将Camera.Parameters对象作为参数传入,这样就可以对拍照进行参数控制,Android2.3.3以后不用设置.(5)调用Camerade

Android中实时预览UI和编写UI的各种技巧

一.啰嗦 之前有读者反馈说,你搞这个所谓的最佳实践,每篇文章最后就给了一个库,感觉不是很高大上.其实,我在写这个系列之初就有想过这个问题.我的目的是:给出最实用的库来帮助我们开发,并且尽可能地说明这个库是如何编写的,希望让初创公司的程序员少写点给后人留坑的代码(想必大家对此深有体会).我之前给出的库都是很简单基础的,基本是一看就懂(但足够精妙),如果以后的文章涉及到了复杂的库,我会专门附加一篇库的讲解文.如果一个库的原理你知道,此外这个库很容易扩展和维护,而且它还用到了很多最佳实践的经验,你为什

Directshow_驱动摄像头预览视频

出于兴趣一直以来都断断续续看过dshow的东西,可没怎么系统地总结过(学习还是要多实践,多总结啊). dshow预览摄像头捕捉的视频比较简单基础,网上相关的资料很多,简单的思路由下面代码所示: ICaptureGraphBuilder2 *pBuild; // Capture Graph Builder // Initialize pBuild (not shown). IBaseFilter *pCap; // Video capture filter. /* Initialize pCap

Android L 64bit 预览版来了!Android L模拟器配置及创建项目

Android L: Android L可能就是Android Lollipop(4.5或者5.0),因为Google一直以来都是用甜点为版本命名. 而据说在10月中旬也就是15或16号Google的发布会上应该会推出Nexus 6和Nexus 9,这两个新品都是搭载Android L,而Nexus 9应该是搭载Navidia的64位CPU, 而且之前的Nexus5和7应该都会接到升级推送.(期待Nexus9好久了,希望金属机身啊) 而就在昨天10.9号,Google发布了Android L 6