全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android相机Camera基础知识

一、概述
本章节主要讲述的Android相机Camera的相关知识点,主要包含三个方面,Android启动系统相机生成缩略图、Android启动系统相机生成原图以及Android自定义相机等。

二、Android启动系统相机

核心代码:

package com.czhappy.camerademo.activity;

import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;

import com.czhappy.camerademo.R;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class MainActivity extends AppCompatActivity {

  private static int REQ_1 = 1;
  private static int REQ_2 = 2;
  private ImageView image_iv;

  private String mFilePath;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    image_iv = (ImageView) findViewById(R.id.image_iv);

    mFilePath = Environment.getExternalStorageDirectory().getPath();
    mFilePath = mFilePath +"/" + System.currentTimeMillis()+".jpg";
  }

  public void startCamera1(View view){
    //隐式Intent调用
    Intent it = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(it, REQ_1);
  }

  public void startCamera2(View view){
    //隐式Intent调用
    Intent it = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    Uri photoUri = Uri.fromFile(new File(mFilePath));
    it.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
    startActivityForResult(it, REQ_2);
  }

  public void customCamera(View view){
    Intent it = new Intent(MainActivity.this, CustomCameraActivity.class);
    startActivity(it);
  }


  /**
   *
   * @param requestCode
   * @param resultCode
   * @param data //缩略图
   */
  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(resultCode == RESULT_OK){
      if(requestCode == REQ_1){//缩略图
        Bundle bundle = data.getExtras();
        Bitmap bmp = (Bitmap) bundle.get("data");
        image_iv.setImageBitmap(bmp);
      }else if(requestCode == REQ_2){//原图
        FileInputStream fis = null;
        try {
          fis = new FileInputStream(mFilePath);
          Bitmap bitmap = BitmapFactory.decodeStream(fis);
          image_iv.setImageBitmap(bitmap);
        } catch (FileNotFoundException e) {
          e.printStackTrace();
        }finally {
          try {
            fis.close();
          } catch (IOException e) {
            e.printStackTrace();
          }
        }
      }

    }
  }
}

三、Android自定义相机

1.自定义相机步骤:

创建相机
创建SurfaceView
关联相机与SurfaceView
调整相机显示效果
自定义相机预览界面

2.核心代码:
自定义相机CustomCameraActivity.java

package com.czhappy.camerademo.activity;

import android.content.Intent;
import android.graphics.ImageFormat;
import android.hardware.Camera;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;

import com.czhappy.camerademo.R;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * Description:
 * User: chenzheng
 * Date: 2016/12/27 0027
 * Time: 13:43
 */
public class CustomCameraActivity extends AppCompatActivity implements SurfaceHolder.Callback{

  private SurfaceView mPreview;
  private Camera mCamera;
  private SurfaceHolder mHolder;
  private Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {
    @Override
    public void onPictureTaken(byte[] data, Camera camera) {
      File tempFile = new File("/sdcard/temp.png");
      try {
        FileOutputStream fos = new FileOutputStream(tempFile);
        fos.write(data);
        fos.close();
        Intent it = new Intent(CustomCameraActivity.this, CaptureResultActivity.class);
        it.putExtra("picPath", tempFile.getAbsolutePath());
        startActivity(it);
        finish();
      } catch (FileNotFoundException e) {
        e.printStackTrace();
      } catch (IOException e) {
        e.printStackTrace();
      }

    }
  };


  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_custom_camera);

    mPreview = (SurfaceView) this.findViewById(R.id.preview);
    mHolder = mPreview.getHolder();
    mHolder.addCallback(this);
    //点击自动对焦
    mPreview.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        mCamera.autoFocus(null);;

      }
    });
  }

  /**
   * 拍照
   * @param view
   */
  public void capture(View view){
    Camera.Parameters parameters = mCamera.getParameters();
    parameters.setPictureFormat(ImageFormat.JPEG);
    parameters.setPictureSize(800,400);
    parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);//自动对焦
    mCamera.autoFocus(new Camera.AutoFocusCallback() {
      @Override
      public void onAutoFocus(boolean success, Camera camera) {
        //对焦准确拍摄照片
        if(success){
          mCamera.takePicture(null, null, mPictureCallback);

        }
      }
    });


  }

  /**
   * 获取相机对象
   * @return
   */
  private Camera getCamera(){
    mCamera = Camera.open();
    return mCamera;

  }

  /**
   * 开始预览相机内容
   */
  private void setStartPreview(Camera camera, SurfaceHolder holder){
    try {
      camera.setPreviewDisplay(holder);
      camera.setDisplayOrientation(90);//设置相机预览为竖屏90度
      camera.startPreview();
    } catch (IOException e) {
      e.printStackTrace();
    }

  }

  /**
   * 释放相机资源
   */
  private void releaseCamera(){
    if(mCamera!=null){
      mCamera.setPreviewCallback(null);
      mCamera.stopPreview();
      mCamera.release();
      mCamera = null;

    }


  }

  @Override
  protected void onResume() {
    super.onResume();
    if (mCamera==null){
      mCamera = getCamera();
      if(mHolder!=null){
        setStartPreview(mCamera, mHolder);
      }
    }
  }

  @Override
  protected void onPause() {
    super.onPause();
    releaseCamera();
  }

  @Override
  public void surfaceCreated(SurfaceHolder holder) {
    setStartPreview(mCamera, mHolder);
  }

  @Override
  public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
    mCamera.stopPreview();
    setStartPreview(mCamera, mHolder);
  }

  @Override
  public void surfaceDestroyed(SurfaceHolder holder) {
    releaseCamera();
  }
}

生成图片结果页面CaptureResultActivity.java

package com.czhappy.camerademo.activity;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;

import com.czhappy.camerademo.R;

import java.io.FileInputStream;
import java.io.FileNotFoundException;

/**
 * Description:
 * User: chenzheng
 * Date: 2016/12/30 0030
 * Time: 13:27
 */
public class CaptureResultActivity extends AppCompatActivity {

  private String picPath;
  private ImageView result_iv;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_capture_result);

    picPath = getIntent().getStringExtra("picPath");
    result_iv = (ImageView) findViewById(R.id.result_iv);
    try {
      FileInputStream fis = new FileInputStream(picPath);
      Bitmap bitmap = BitmapFactory.decodeStream(fis);
      Matrix matrix = new Matrix();
      matrix.setRotate(90);//旋转90度矩阵
      bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
      result_iv.setImageBitmap(bitmap);
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    }

  }
}


四、项目源代码下载

http://xiazai./201701/yuanma/AndroidCamera().rar

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Android  # 相机  # Camera  # Android自定义组件获取本地图片和相机拍照图片  # Android CameraX结合LibYUV和GPUImage自定义相机滤镜  # Android自定义相机Camera实现手动对焦的方法示例  # Android 用 camera2 API 自定义相机  # Android camera2 判断相机功能是否可控的实例  # Android自定义照相机Camera出现黑屏的解决方法  # Android Camera开发实现可复用的相机组件  # 自定义  # 自动对焦  # 隐式  # 对焦  # 三个方面  # 大家多多  # 显示效果  # 源代码下载  # strong  # ACTION_IMAGE_CAPTURE  # System  # currentTimeMillis  # jpg  # fromFile  # putExtra  # EXTRA_OUTPUT  # startActivityForResult  # photoUri  # super  # setContentView 


相关文章: Python如何创建带属性的XML节点  盘锦网站制作公司,盘锦大洼有多少5G网站?  建站之星2.7模板:企业网站建设与h5定制设计专题  如何在万网ECS上快速搭建专属网站?  杭州银行网站设计制作流程,杭州银行怎么开通认证方式?  如何在Golang中引入测试模块_Golang测试包导入与使用实践  企业微网站怎么做,公司网站和公众号有什么区别?  建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南  建站主机功能解析:服务器选择与快速搭建指南  制作网站外包平台,自动化接单网站有哪些?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?  如何登录建站主机?访问步骤全解析  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  开心动漫网站制作软件下载,十分开心动画为何停播?  教学论文网站制作软件有哪些,写论文用什么软件 ?  小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  如何快速建站并高效导出源代码?  如何快速启动建站代理加盟业务?  北京建设网站制作公司,北京古代建筑博物馆预约官网?  西安专业网站制作公司有哪些,陕西省建行官方网站?  宝塔面板创建网站无法访问?如何快速排查修复?  网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?  seo网站制作优化,网站SEO优化步骤有哪些?  想学网站制作怎么学,建立一个网站要花费多少?  网站制作员失业,怎样查看自己网站的注册者?  如何在阿里云域名上完成建站全流程?  如何快速搭建高效简练网站?  建站之星备案是否影响网站上线时间?  如何通过WDCP绑定主域名及创建子域名站点?  如何通过多用户协作模板快速搭建高效企业网站?  SQL查询语句优化的实用方法总结  建站之星如何优化SEO以实现高效排名?  ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?  如何用西部建站助手快速创建专业网站?  南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?  c++ stringstream用法详解_c++字符串与数字转换利器  如何确保FTP站点访问权限与数据传输安全?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  婚礼视频制作网站,学习*后期制作的网站有哪些?  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?  如何挑选最适合建站的高性能VPS主机?  c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  Android自定义控件实现温度旋转按钮效果  建站之星代理如何获取技术支持?  零服务器AI建站解决方案:快速部署与云端平台低成本实践 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。