一、概述本章节主要讲述的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();

}

}

}

四、项目源代码下载

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

android camera 显示过程,Android相机Camera基础知识相关推荐

  1. android camera 显示过程,Android Camera2 API显示已处理的预览图像

    澄清问题后编辑;最初的答案在底部 取决于您在哪里进行处理. 如果您正在使用RenderScript,则可以将Surface从SurfaceView或TextureView连接到分配(使用setSurf ...

  2. Android Camera开发(一)之基础知识

    概述 Android手机关于Camera的使用,一是拍照,二是摄像,由于Android提供了强大的组件功能,为此对于在Android手机系统上进行Camera的开发,我们可以使用两类方法:一是借助In ...

  3. Android ble连接过程,Android BLE的一些基础知识及相关操作流程 - 全文

    前言: 本文主要描述Android BLE的一些基础知识及相关操作流程,不牵扯具体的业务实现,其中提供了针对广播包及响应包的解析思路,希望对正在或即将面临Android BLE开发的伙伴们有所引导. ...

  4. android 启动app过程,Android P APP冷启动过程全解析(之四)

    经历了前面的三个阶段,activity终于初始化完毕,终终终于开始显示了和接收事件了!这就是本阶段所要做的工作: 15.新建DecorView 16.新建ViewRootImpl 17.添加到Disp ...

  5. android 安全讲座第三层 linux权限基础知识

    android系统是给予linux的内核,所以关于linux内核中最重要的权限提取,这里列举一下基础知识,以备将来真正的利用系统漏洞进行权限提升的时候做储备. 问题: 1 文件权限 4755的含义? ...

  6. android字符串显示textview,Android编程:TextView不显示完整字符串

    我有一个TextView,我试图使显示一个基于2d字符的网格.在我的Java代码中,我创建了一个2d数组,我将该数组填充到字符串中,并将每个条目附加到另一个,并在达到数组行的末尾时添加换行符(.n). ...

  7. android流量显示插件,[android]仿360状态,种流量监控桌面浮动显示

    [android]仿360状态,类流量监控桌面浮动显示 前两天看到部分音频播放器可以实现在桌面上显示歌词,360那个浮动的桌面提示,想不到怎么实现.然后查了些资料大致了解了下,比想象的简单多了.先看效 ...

  8. android图片显示组件,Android可循环显示图像的Android Gallery组件用法实例

    本文实例分析了Android可循环显示图像的Android Gallery组件用法.分享给大家供大家参考,具体如下: Gallery组件主要用于横向显示图像列表,不过按常规做法.Gallery组件只能 ...

  9. android 来电显示号码,android监控来电显示

    原理:电话预订功能,需要显示来电者的电话号码,c#实现获取电话号码,并在应用程序中显示出来.将电话机通过支持来电显示的moderm或USB来电显示盒(来电宝)与电话线连接,即可实现来电显示功能. 为了 ...

最新文章

  1. OpenBSD配置Apache反向代理
  2. 数据库修改后Hibernate的配置更新
  3. jq画布插件_超炫HTML 5开发的jQuery进度条插件
  4. 计算机刚过国家线能调剂到哪些学校,2020考研:刚过国家线好不好调剂?这4个调剂策略!考生要知道...
  5. matlab 仿真钢琴,用Matlab模拟钢琴的声音
  6. linux用户组和权限分配
  7. z blog php版本怎么样,Z-BlogPHP版本可能用到的SQL语句整理
  8. 分布式事务解决方案 Seata 的原理个人理解以及 demo 配置
  9. dfmea文件_DFMEA范本.doc
  10. MATLAB数字图像处理(一)图像的基本操作
  11. 简述RAID 0,1,5,10区别
  12. php怎么画五星红旗,php基于GD库画五星红旗的方法
  13. Cocos Create 3.3 打包安卓apk
  14. C/C++ 电脑微信dat文件解密及工具分享
  15. Python爬虫项目实战(欧美音乐网站)
  16. Pimple Containter 容器使用实例代码
  17. 基于傅里叶变换的电力测频算法
  18. Java并发编程的艺术(推荐指数:☆☆☆☆☆☆)
  19. 计算机默认应用程序怎么取消,如何取消默认打开的QQ浏览器
  20. Android--高级控件--ListViewGridView

热门文章

  1. 电脑麦克风使用不了没有声音了怎么办
  2. 阿里OSS对象存储,实现图片上传代码;
  3. 批量修改文件名称的方法
  4. 王者荣耀服务器维护中有什么漏洞,王者荣耀:排位惊现漏洞,利用这个BUG一天上王者,三天登荣耀...
  5. IoT:大端与小端字节数据详解
  6. 为什么python最后一个元素下标是负一_Python负下标
  7. if/else双分支(JS)
  8. JavaScript获取当前月的第一天和最后一天日期
  9. 拳魂觉醒服务器维护怎么办,拳魂觉醒 哪些不为人知的的小秘密
  10. DQL——数据查询语言