1.首先android6.0以上版本要动态申请相机和文件读写权限
2.废话不啰嗦,上代码:

/*** 摄像头画面采集界面*/
public class DistinguishActivity extends BaseActivity implements SurfaceHolder.Callback, Camera.PictureCallback {private ImageView iv_ivPhoto;private SurfaceView surfaceView;private SurfaceHolder surfaceHolder;private Camera camera;List<String> unGrantedPermissions;private static final String[] MANDATORY_PERMISSIONS = {"android.permission.CAMERA",Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE};private String localImgPath;private LinearLayout guide_layout;private TextView btn_preview;private IPointToReadClient client;private boolean isAuthorizatoned = false;private final int TAKE_PICTURE = 0xa1;private boolean camaraPouse = false;private Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);switch (msg.what) {case TAKE_PICTURE:takePicture();break;}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_distinguish);initViews();checkPermissions();}@Overrideprotected void onResume() {super.onResume();if (camaraPouse) {initCamera();}}private void checkPermissions() {unGrantedPermissions = new ArrayList();for (String permission : MANDATORY_PERMISSIONS) {if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {unGrantedPermissions.add(permission);}}if (unGrantedPermissions.size() == 0) {//已经获得了所有权限initCamera();} else {//部分权限未获得,重新请求获取权限String[] array = new String[unGrantedPermissions.size()];ActivityCompat.requestPermissions(this, unGrantedPermissions.toArray(array), 0);}}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {unGrantedPermissions.clear();for (int i = 0; i < permissions.length; i++) {if (grantResults[i] == PackageManager.PERMISSION_DENIED)unGrantedPermissions.add(permissions[i]);}if (unGrantedPermissions.size() > 0) {for (String permission : unGrantedPermissions) {if (!ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) {Toast.makeText(this, "权限" + permission + "被拒绝", Toast.LENGTH_SHORT).show();finish();} else ActivityCompat.requestPermissions(this, new String[]{permission}, 0);}} else {initCamera();}}@Overrideprotected void onDestroy() {super.onDestroy();camera.release();camera = null;handler.removeMessages(TAKE_PICTURE);}private void initViews() {surfaceView = (SurfaceView) findViewById(R.id.iv_surfaceview);iv_ivPhoto = (ImageView) findViewById(R.id.iv_Photo);btn_close = (ImageView) findViewById(R.id.btn_close);btn_preview = (TextView) findViewById(R.id.btn_preview);guide_layout = (LinearLayout) findViewById(R.id.guide_layout);btn_preview.setOnClickListener(this);showCamera();}private void initCamera() {surfaceHolder = surfaceView.getHolder();surfaceHolder.setFormat(PixelFormat.TRANSPARENT);surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);surfaceHolder.setKeepScreenOn(true);//屏幕常亮surfaceHolder.addCallback(this);handler.sendEmptyMessageDelayed(TAKE_PICTURE, 1000);//2秒后自动拍照}private void takePicture() {if (null != camera && null != client) {camera.takePicture(null, null, null, DistinguishActivity.this);Toast.makeText(DistinguishActivity.this,"=========拍照========",Toast.LENGTH_SHORT).show();LogUtils.debugInfo("takePicture------------执行了拍照------------");}}@Overridepublic void surfaceCreated(SurfaceHolder surfaceHolder) {int cameraNums = Camera.getNumberOfCameras();LogUtils.debugInfo("surfaceCreated------------" + cameraNums + "---------------");try {camera = Camera.open(cameraNums - 1);camera.setPreviewDisplay(surfaceHolder);Camera.Parameters parameters = camera.getParameters();List<Camera.Size> sizeList = parameters.getSupportedPictureSizes();int bestSize = 0;for (Camera.Size size : sizeList) {if (size.width == size.height) {bestSize = size.width;}LogUtils.debugInfo("系统支持的尺寸-----------------------size.width=" + size.width + ";size.height=" + size.height);}parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);//1连续对焦if (bestSize == 0) {parameters.setPictureSize(2976, 2976);//这个尺寸最接近1440*1440} else {parameters.setPictureSize(bestSize, bestSize);}if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) {parameters.set("orientation", "portrait");camera.setDisplayOrientation(90);parameters.setRotation(90);}List<String> colorEffects = parameters.getSupportedColorEffects();Iterator<String> cei = colorEffects.iterator();while (cei.hasNext()) {String currentEffect = cei.next();if (currentEffect.equals(Camera.Parameters.EFFECT_SOLARIZE)) {parameters.setColorEffect(Camera.Parameters.EFFECT_SOLARIZE);break;}}camera.setParameters(parameters);camera.startPreview();camera.cancelAutoFocus();// 2如果要实现连续的自动对焦,这一句必须加上} catch (Exception e) {// TODO Auto-generated catch blockLogUtils.debugInfo("Camera.open------------Exception------------" + e.getMessage());Toast.makeText(DistinguishActivity.this, "相机打开失败", Toast.LENGTH_SHORT).show();camera.release();finish();}}@Overridepublic void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {//        //实现自动对焦camera.autoFocus(new Camera.AutoFocusCallback() {@Overridepublic void onAutoFocus(boolean success, Camera camera) {if (success) {camera.startPreview();camera.cancelAutoFocus();//只有加上了这一句,才会自动对焦。}}});}@Overridepublic void surfaceDestroyed(SurfaceHolder surfaceHolder) {try {camera.stopPreview();camera.release();}catch (RuntimeException e){LogUtils.debugInfo("surfaceDestroyed------------------------RuntimeException="+e.getMessage());}}@Overridepublic void onPictureTaken(byte[] bytes, Camera mcamera) {LogUtils.debugInfo("onPictureTaken------------------------");mcamera.startPreview();BitmapFactory.Options options = new BitmapFactory.Options();final Bitmap bitmap = getPicFromBytes(bytes, options);//byte转为bitmap原图final Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, 1440, 1440, true);//原图压缩为指定尺寸final Bitmap result = setMatrix(scaledBitmap);//改变镜像new Thread(new Runnable() {@Overridepublic void run() {//保存到本地saveImageToGallery(result);// 发起网络请求,上传图片到服务器
handler.sendEmptyMessageDelayed(TAKE_PICTURE, 50);//1秒后自动拍照}}).start();}/*** @param 将字节数组转换为ImageView可调用的Bitmap对象* @param bytes* @param opts* @return Bitmap*/private Bitmap getPicFromBytes(byte[] bytes,BitmapFactory.Options opts) {if (bytes != null)if (opts != null)return BitmapFactory.decodeByteArray(bytes, 0, bytes.length,opts);elsereturn BitmapFactory.decodeByteArray(bytes, 0, bytes.length);return null;}/*** 设置镜像左右反一下** @param bmpPreview* @return*/private Bitmap setMatrix(Bitmap bmpPreview) {Bitmap bitmap = null;Matrix m = new Matrix();m.postScale(-1, 1); // 镜像水平翻转bitmap = Bitmap.createBitmap(bmpPreview, 0, 0, bmpPreview.getWidth(), bmpPreview.getHeight(), m, true);return bitmap;}public int saveImageToGallery(Bitmap bmp) {//生成路径String root = Environment.getExternalStorageDirectory().getAbsolutePath();String dirName = "FingerReadingPhoto";File appDir = new File(root, dirName);if (!appDir.exists()) {appDir.mkdirs();}String fileName = "TestPhoto.png";localImgPath = appDir + "/" + fileName;//获取文件File file = new File(appDir, fileName);if (file.exists()) {file.delete();}FileOutputStream fos = null;try {fos = new FileOutputStream(file);bmp.compress(Bitmap.CompressFormat.JPEG, 100, fos);fos.flush();//通知系统相册刷新sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,Uri.fromFile(new File(file.getPath()))));return 2;} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {if (fos != null) {fos.close();}} catch (IOException e) {e.printStackTrace();}}return -1;}private void hideCamera() {RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) surfaceView.getLayoutParams();params.width = 1;params.height = 1;surfaceView.setLayoutParams(params);}private void showCamera() {DisplayMetrics outMetrics = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(outMetrics);int widthPixels = outMetrics.widthPixels;int heightPixels = outMetrics.heightPixels;RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) surfaceView.getLayoutParams();params.width = widthPixels;params.height = heightPixels;surfaceView.setLayoutParams(params);}public void close(View view) {if (action == 0) {guide_layout.setVisibility(View.VISIBLE);hideCamera();} else {finish();}}
}

android Camera自动拍照、自动对焦并获取指定大小图片相关推荐

  1. iOS-自定义相机拍照获取指定区域图片

    功能并不难,之所以被难住是因为把问题想复杂了,记录一下. 自定义的相机拍照使用AVCaptureSession,获取指定区域图片使用图片裁切功能,重点在于不能直接使用AVCaptureSession获 ...

  2. android开发自动拍照,Android:Camera2开发详解(上):实现预览、拍照、保存照片等功能...

    android.jpg 前言 在前几篇文章中介绍了如何调用系统相机拍照和使用Camera1的实现自定义相机拍照.人脸检测等功能 文章传送门: 接下来的几篇文章中,我将给大家介绍如何使用Camera2实 ...

  3. android 后台自动拍照,怎么实现后台拍照功能,求解

    如何实现后台拍照功能,求解. 自己去网上找了一段后台拍照代码,如: MainActivity.java就实现一个按钮启动一个服务 public void click(View v) { bindSer ...

  4. android 实现自动拍照,android 调用摄像头自动拍照 并上传到YEELINK

    前几天看到yeelink这个网站很感兴趣,注册了个图像传感器,就想着写个程序调用安卓摄像头并上传照片 程序很简单这个还是记录一下 首先是权限,分别是联网,相机,文件读取,照相和自动对焦的权限 然后是代 ...

  5. android 实现自动拍照,android实现定时拍照功能

    在手机上面实现,设置一段时间(以秒计时)之后,自动拍照,适用于摄影师建立一个场景,之后设置时间,再进入场景. 界面主要就是一个设置时间的EditText和启动倒计时的Button,设置完时间之后,点击 ...

  6. android 实现自动拍照,Android:调用系统相机实现拍照+裁切(兼容7.0以上系统)

    android.jpg 前言 在平时的工作中,我们会经常遇到这样的需求:比如更改用户头像,我们就需要打开相机或相册,选择照片后进行裁剪,最后上传给后台... 相信这样的功能对小伙伴们来说可能早已司空见 ...

  7. Android Camera HDR 拍照模式的原理

    camera HDR 拍照: (High Dynamic Range Imaging)高动态范围成像 1. 什么是HDR?: 用来实现比普通数字图像技术更大曝光动态范围(即更大的明暗差别)的一组技术. ...

  8. android开发自动拍照,android使用camera2实现隐藏式的相机自动拍照

    为了实现隐藏相机的同时还能进行拍照,试过了各种.setVisibility方法,发现只要相机被设置为隐藏后,相机不会运行拍照. 后来在一个源码发现只要把layout的高和宽设置为1即可 这是我添加相机 ...

  9. 兼容Android 11 相机拍照,从相册中选择,裁剪图片

    由于android 11对存储空间进行了更新,导致无法进入裁剪或者裁剪后无法保存,返回路径等问题. android 10以下可以参考:android 相机拍照,从相册中选择,裁剪图片 前面部分和之前的 ...

最新文章

  1. LeetCode Permutation Sequence(求排列中的第k个排列是什么)
  2. Photoshop绘制植物大战僵尸中的食人花
  3. Linux下的命令总结笔记(一)
  4. 提前还清贷款为什么还要付违约金?
  5. python 中 __name__ 的使用
  6. UML实践----用例图、顺序图、状态图、类图、包图、协作图
  7. linux基础知识——exec函数
  8. 使用certbot自动申请续期SSL证书(Ubuntu)
  9. 金融风控小白入门必学:审批策略分析岗面试常见问题
  10. 《锋利的jQuery》bug总结(1)
  11. IE11浏览器传时间格式不兼容,c.a.d.c.advice.AdcDaBaseExceptionAdvice : JSON parse error
  12. 程序员又双叕和产品打起来了,说说与产品经理的那些事。
  13. 1.深入理解计算机系统---计算机系统漫游
  14. 直播购物平台应开发的功能
  15. 大众车机天宝187A Hack笔记
  16. 苹果手机语音备忘录在哪_苹果手机的录音功能在哪?教你快速开启,想录音太方便了...
  17. 计算机网络技术协议的三要素,通信网络协议三要素
  18. 微信公众号开发及运营(一)
  19. qq文件怎么传到百度云_福利|还在用 QQ、微信、百度云传文件?你应该试试这个跨平台传输工具...
  20. 嵌入式计算机分类,嵌入式系统的分类

热门文章

  1. rc0.d  rc1.d  rc2.d  rc3.d  rc4.d  rc5.d  rc6.d rc.local/etc/rc.d文件目录详解
  2. 04154 项目采购管理 自考学习笔记 -第一章项目采购管理概述
  3. 惊呆了,看华为技术专家的500页微服务架构笔记,感觉我格局太小
  4. 银监局计算机考试,2018黑龙江银行考试:银监会计算机笔试备考
  5. “我月入过万,掏不出份子钱”
  6. golang 获取当天是周几(两种方法)
  7. Shieldstar:一款改变世界的STG游戏!震撼发布!
  8. www.男生女生.cn
  9. 微信公众号上传图片问题!!!!!!!!!!!
  10. 大学计算机基础知识培训心得,大学计算机基础精品课程培训体会