关于降低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;
 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又取支持分辨率里面最大的
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值