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

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

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

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

 package com.example.camerbatterytest;

 import java.io.IOException;
import java.util.List; import android.app.Activity;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.hardware.Camera.Size;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.Button; public class CamerActivity extends Activity implements SurfaceHolder.Callback{ Button takephoto;//未实现
private SurfaceView mySurfaceView;
private SurfaceHolder mysurfaceHolder;
Camera camera;//5.0以后这个camera已经不推荐使用
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_camer);
takephoto=(Button)findViewById(R.id.takephoto);
mySurfaceView = (SurfaceView) findViewById(R.id.surfaceView1);
mysurfaceHolder=mySurfaceView.getHolder();
mysurfaceHolder.addCallback(this); }
@Override
public void surfaceCreated(SurfaceHolder holder) {
Log.d("huang","surfaceCreated");
camera = Camera.open(); }
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
Log.d("huang","surfaceview width="+width+" and height="+height);
Camera.Parameters parameters = camera.getParameters();
Camera.Size bestSize=getBestPreviewSize(width,height,parameters);
parameters.setPreviewSize(bestSize.width, bestSize.height);
camera.setParameters(parameters); try {
camera.setPreviewDisplay(mysurfaceHolder);
} catch (IOException e) {
e.printStackTrace();
}
camera.setDisplayOrientation(90);//显示的方向旋转角度
camera.startPreview(); }
@Override
public void surfaceDestroyed(SurfaceHolder holder)
{
Log.d("huang","surfaceDestroyed");
if (camera != null)
{
camera.stopPreview();
camera.release();
} } private Camera.Size getBestPreviewSize(int surfaceViewWidth, int surfaceViewHeight, Camera.Parameters parameters) {
Camera.Size bestSize=null;
        //不同机器 尺寸大小排序方式不一样  有的从小到大有的从大到小
for (Camera.Size size : parameters.getSupportedPreviewSizes())
{
if (size.width <= surfaceViewWidth && size.height <= surfaceViewHeight)
{
if (bestSize == null) //初始化一个值
bestSize=size;
else
{
int tempArea=bestSize.width * bestSize.height;
int newArea=size.width * size.height; if (newArea > tempArea) //取满足条件里面最大的
bestSize=size;
}
}
} return bestSize;
} }

主要是

getBestPreviewSize()方法获得了最合适的分辨率 即既小于当前surfaceview的width height又取支持分辨率里面最大的

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

  1. android camera 摄像头预览画面变形

    问题:最近在处理一下camera的问题,发现在竖屏时预览图像会变形,而横屏时正常.但有的手机则是横竖屏都会变形. 结果:解决了预览变形的问题,同时支持前后摄像头,预览无变形,拍照生成的jpg照片方向正 ...

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

    1,MTK 平台如何查询当前使用的是哪颗摄像头及相关的模组信息? 在该目录下可以查到当前平台及相关项目的配置文件 ProjectConfig.mk \ALPS.JB.MP.V1_W_20120919\ ...

  3. Android 摄像头预览悬浮窗,可拖动,可显示在其他app上方

    市面上常见的摄像头悬浮窗,如微信.手机QQ的视频通话功能,有如下特点: 整屏页面能切换到一个小的悬浮窗 悬浮窗能运行在其他app上方 悬浮窗能跳回整屏页面,并且悬浮窗消失 我们探讨过用CameraX打 ...

  4. Android CameraX 打开摄像头预览

    目标很简单,用CameraX打开摄像头预览,实时显示在界面上.看看CameraX有没有Google说的那么好用.先按最简单的来,把预览显示出来. 引入依赖 模块gradle的一些配置,使用的Andro ...

  5. Android 摄像头预览悬浮窗

    用CameraX打开摄像头预览,显示在界面上.结合悬浮窗的功能.实现一个可拖动悬浮窗,实时预览摄像头的例子. 这个例子放进了单独的模块里.使用时注意gradle里的细微差别. 操作摄像头,打开预览.这 ...

  6. Android手机摄像头编程入门

    本讲内容:Android手机摄像头编程入门智能手机中的摄像头和普通手机中的摄像头最大的区别在于,智能机上的摄像头可以由程序员写程序控制, 做一些有趣的应用譬如,画中画,做一些有用的应用譬如二维码识别, ...

  7. Android Camera2获取预览尺寸和fps范围

    升降摄像头安卓手机刚上市的时候,有些很流行的app刚打开时,前置摄像头就升起来了.好像就是出来看一眼然后又收回去. 虽然我们不调用拍照功能,只是为了获取相机的信息,也是可能让摄像头升起来的. Came ...

  8. Android 10开发者预览版功能介绍

    Android P的开发者预览版最亮眼的功能莫过于支持“刘海屏”等屏幕显示.同样在适配可折叠设备方面,Android Q的第一个开发者预览版也很“接地气”,谷歌早在去年11月就发布了对可折叠设备的支持 ...

  9. DSO 运行 —— dso_ros + Android 手机摄像头

    转载请注明出处,谢谢 原创作者:Mingrui 原创链接:https://www.cnblogs.com/MingruiYu/p/12425855.html 本文要点: dso 配置安装 dso 离线 ...

随机推荐

  1. C#中子窗体获取父窗体中控件的内容

    今天在做一个联系人管理的C#设计时,遇到了这个问题,我需要将父窗体中的textBox中的值传到子窗体并进行数据库查询操作,我用了new 父窗体().textBox.text;来进行值传递,然而并无卵用 ...

  2. unity碰撞组件、刚体组件

    游戏导入标准资源包“Character Controllers”后可以为游戏对象添加 character(角色控制器)组件: 添加角色控制器组建以后可以控制游戏对象移动: 角色控制器组件因为与碰撞组件 ...

  3. hdu1054 树状dp

    B - 树形dp Crawling in process... Crawling failed Time Limit:2000MS     Memory Limit:10000KB     64bit ...

  4. jquery的uploadify上传jsp+servlet

    1.准备材料:下载jquery.uploadify上传js   注意:这个上传在firefox下会出现问题如果你在项目中加了拦截器,因为session会丢失,所以你可以传参的时候带上你所需要的条件,在 ...

  5. jQuery封装的表单验证,模仿网易或者腾讯登录的风格

    模仿网易邮箱做了一个登录表单验证,不太好,请指教 上代码 <form action="" name="" id="form1"> ...

  6. php+mssql 已经写好的万能函数

    <?php /****************************************************************************************** ...

  7. libc++abi.dylib: terminate_handler unexpectedly threw an exception错误小结

    说法一: 我们在运行xcode工程时,有时候会遇到”libc++abi.dylib: terminate_handler unexpectedly threw an exception”错误,app莫 ...

  8. [TYVJ] P1002 谁拿了最多奖学金

    谁拿了最多奖学金 背景 Background NOIP2005复赛提高组第一题   描述 Description 某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同 ...

  9. 《Programming WPF》翻译 第5章 4.元素类型样式

    原文:<Programming WPF>翻译 第5章 4.元素类型样式 命名样式非常有用,当你得到一组属性并应用到特点的元素上.然而,如果你想要应用一个统一的样式到所有确定元素类型的实例, ...

  10. Linux上的设备管理器

    一般windows上我们用它自带的“设备管理器”来查看,管理,安装,卸载驱动. 那么问题来了,Linux上用什么命令来看呢? 可以用: lshw   lsusb lspci lsmod 查看特定模块. ...