预览流程: Camera.open-->camera.setPreviewDisplay->camera.startPreview

拍照:camera.takePicture-->保存图片-->camera.startPreview

public class MainActivity extends Activity {

String TAG="Camera_1111";

SurfaceView surfaceView;

SurfaceHolder surfaceHolder;

Camera camera;

int cameraId=0;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

Log.e(TAG,"---------onCreate---------");

setContentView(R.layout.activity_main);

surfaceView=(SurfaceView) findViewById(R.id.svCamera);

surfaceHolder=surfaceView.getHolder();

surfaceHolder.addCallback(new SurfaceHolder.Callback() {

@Override

public void surfaceCreated(SurfaceHolder holder) {

camera=Camera.open(cameraId);

try {

camera.setPreviewDisplay(surfaceHolder);

} catch (IOException e) {

e.printStackTrace();

}

setCameraDisplayOrientation();

// configParameters();

camera.startPreview();

}

@Override

public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

}

@Override

public void surfaceDestroyed(SurfaceHolder holder) {

Log.e(TAG,"---------surfaceDestroyed---------");

camera.release();

}

});

}

//配置预览参数

private void configParameters(){

Camera.Parameters param = camera.getParameters();

param.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);

param.setPictureFormat(ImageFormat.JPEG);

param.setJpegQuality(100);

param.setPreviewSize(param.getSupportedPreviewSizes().get(0).width,param.getSupportedPreviewSizes().get(0).height);

Log.e(TAG,"param.getSupportedPreviewSizes()"+param.getSupportedPreviewSizes().get(0).width+" X "+param.getSupportedPreviewSizes().get(0).height);

param.setPictureSize(param.getSupportedPictureSizes().get(0).width,param.getSupportedPictureSizes().get(0).height);

camera.setParameters(param);

}

//旋转预览角度

private void setCameraDisplayOrientation() {

android.hardware.Camera.CameraInfo info = new android.hardware.Camera.CameraInfo();

android.hardware.Camera.getCameraInfo(cameraId, info);

int rotation = getWindowManager().getDefaultDisplay().getRotation();

int degrees = 0;

switch (rotation) {

case Surface.ROTATION_0: degrees = 0; break;

case Surface.ROTATION_90: degrees = 90; break;

case Surface.ROTATION_180: degrees = 180; break;

case Surface.ROTATION_270: degrees = 270; break;

}

int result;

if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {

result = (info.orientation + degrees) % 360;

result = (360 - result) % 360; // compensate the mirror

} else { // back-facing

result = (info.orientation - degrees) % 360;

}

Log.e(TAG,"rotation ="+result);

//旋转预览的角度

camera.setDisplayOrientation(result);

//-----------------------------

//旋转生成的照片角度

Camera.Parameters param = camera.getParameters();

param.setRotation(result);

camera.setParameters(param);

}

public void photo(View view){

camera.takePicture(null,null,new Camera.PictureCallback(){

@Override

public void onPictureTaken(byte[] data, Camera camera) {

savePicture(data);

camera.startPreview();

}

});

}

private void savePicture(byte[] data) {

String root = Environment.getExternalStorageDirectory().getPath();

File objPic = new File(root,"test.jpg");

BufferedOutputStream bos = null;

try {

bos = new BufferedOutputStream(new FileOutputStream(objPic));

bos.write(data);

bos.flush();

Toast.makeText(this,"拍照成功",Toast.LENGTH_SHORT).show();

} catch (IOException e) {

e.printStackTrace();

}finally {

if(bos!=null){

try {

bos.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

public classMainActivity extendsActivity {

String TAG="Camera_1111";

SurfaceView surfaceView;

SurfaceHolder surfaceHolder;

Camera camera;

intcameraId=0;

@Overrideprotected voidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

Log.e(TAG,"---------onCreate---------");

setContentView(R.layout.activity_main);

surfaceView=(SurfaceView) findViewById(R.id.svCamera);

surfaceHolder=surfaceView.getHolder();

surfaceHolder.addCallback(newSurfaceHolder.Callback() {

@Overridepublic voidsurfaceCreated(SurfaceHolder holder) {

camera=Camera.open(cameraId);

try{

camera.setPreviewDisplay(surfaceHolder);

} catch(IOException e) {

e.printStackTrace();

}

setCameraDisplayOrientation();

// configParameters();camera.startPreview();

}

@Overridepublic voidsurfaceChanged(SurfaceHolder holder, intformat, intwidth, intheight) {

}

@Overridepublic voidsurfaceDestroyed(SurfaceHolder holder) {

Log.e(TAG,"---------surfaceDestroyed---------");

camera.release();

}

});

}

//配置预览参数private voidconfigParameters(){

Camera.Parameters param = camera.getParameters();

param.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);

param.setPictureFormat(ImageFormat.JPEG);

param.setJpegQuality(100);

param.setPreviewSize(param.getSupportedPreviewSizes().get(0).width,param.getSupportedPreviewSizes().get(0).height);

Log.e(TAG,"param.getSupportedPreviewSizes()"+param.getSupportedPreviewSizes().get(0).width+" X "+param.getSupportedPreviewSizes().get(0).height);

param.setPictureSize(param.getSupportedPictureSizes().get(0).width,param.getSupportedPictureSizes().get(0).height);

camera.setParameters(param);

}

//旋转预览角度private voidsetCameraDisplayOrientation() {

android.hardware.Camera.CameraInfo info = newandroid.hardware.Camera.CameraInfo();

android.hardware.Camera.getCameraInfo(cameraId, info);

introtation = getWindowManager().getDefaultDisplay().getRotation();

intdegrees = 0;

switch(rotation) {

caseSurface.ROTATION_0: degrees = 0; break;

caseSurface.ROTATION_90: degrees = 90; break;

caseSurface.ROTATION_180: degrees = 180; break;

caseSurface.ROTATION_270: degrees = 270; break;

}

intresult;

if(info.facing== Camera.CameraInfo.CAMERA_FACING_FRONT) {

result = (info.orientation+ degrees) % 360;

result = (360- result) % 360; // compensate the mirror} else{ // back-facingresult = (info.orientation- degrees) % 360;

}

Log.e(TAG,"rotation ="+result);

//旋转预览的角度camera.setDisplayOrientation(result);

//-----------------------------//旋转生成的照片角度Camera.Parameters param = camera.getParameters();

param.setRotation(result);

camera.setParameters(param);

}

public voidphoto(View view){

camera.takePicture(null,null,newCamera.PictureCallback(){

@Overridepublic voidonPictureTaken(byte[] data, Camera camera) {

savePicture(data);

camera.startPreview();

}

});

}

private voidsavePicture(byte[] data) {

String root = Environment.getExternalStorageDirectory().getPath();

File objPic = newFile(root,"test.jpg");

BufferedOutputStream bos = null;

try{

bos = newBufferedOutputStream(newFileOutputStream(objPic));

bos.write(data);

bos.flush();

Toast.makeText(this,"拍照成功",Toast.LENGTH_SHORT).show();

} catch(IOException e) {

e.printStackTrace();

}finally{

if(bos!=null){

try{

bos.close();

} catch(IOException e) {

e.printStackTrace();

}

}

}

}

}

原文:https://www.cnblogs.com/jtzp007/p/11650575.html

android camera入门,android 基础一 Camera1 预览、拍照相关推荐

  1. Android实战技巧之四十七:不用预览拍照与图片缩放剪裁

    副标题:Take Picture without preview Android Google出于对隐私的保护,制定了一条门槛,即在Android应用开发中编写拍照程序是必需要有图像预览的.这会对那些 ...

  2. Android camera(4)---Android Camera开发之基础知识篇

    Android Camera开发之基础知识篇 转自:https://blog.csdn.net/feiduclear_up/article/details/51968975#jump5 概述 Andr ...

  3. Android 音视频开发(三) -- Camera2 实现预览、拍照功能

    音视频 系列文章 Android 音视频开发(一) – 使用AudioRecord 录制PCM(录音):AudioTrack播放音频 Android 音视频开发(二) – Camera1 实现预览.拍 ...

  4. Android 使用CameraX实现预览/拍照/录制视频/图片分析/对焦/缩放/切换摄像头等操作

    1. CameraX架构 看官方文档 CameraX架构 有如下这一段话 使用CameraX,借助名为"用例"的抽象概念与设备的相机进行交互. 预览 : 接受用于显示预览的Surf ...

  5. Android APP Camera2应用(02)预览流程

    说明:camera子系统 系列文章针对Android10.0系统,主要针对 camera API2 + HAL3 框架进行解读. 1 预览流程简要解读 @1 由 CameraManager.openC ...

  6. android拍照功能无预览,Android快速实现无预览拍照功能

    本文实例为大家分享了Android实现无预览拍照功能的具体代码,供大家参考,具体内容如下 实现思路: 把预览的SurfaceView的宽高设置为肉眼看不出的值,例如0.1dp,其他的就是自定义相机的标 ...

  7. Android OTG 连接单反相机,相机无法预览无法拍照片问题修复记录

    一开始我用佳能相机链接手机后拍照预览是ok的,后面换成尼康后无法预览拍照,经过一段时间的调试终于解决 Android 手机连接尼康相机后无法实时预览照片问题.其实很简单设置模式问题,就两行行代码搞定: ...

  8. 骁龙camera预览拍照录像流程 api1和api2

    首先说api1的预览流程 CameraActivity的onCreate先区分是不是安全模式(锁屏进入就是安全模式),如果是安全模式会设置flag indowManager.LayoutParams. ...

  9. Camera 2 最简单的预览拍照保存小白指南

    1.Camera 2 的架构图: camera2架构图 Camera2引用了管道的概念将安卓设备和摄像头之间联通起来,系统向摄像头发送Capture请求,而摄像头会返回CameraMetada.这一切 ...

最新文章

  1. 概率论 第三章 多维随机变量及其分布
  2. 三国杀服务器改名 插图修改,《三国杀》大幅修改的武将——新旧两版,你更喜欢哪一位...
  3. 【转】大厦将倾,互联网将如何变革传统行业(上)
  4. Ubuntu16.04LTS +Qt+boost1.66编译错误:consuming_buffers.hpp: parse error in template argument list...
  5. oracle数据库下载地址
  6. Asymptotic I Catalan Number
  7. cad填充密度怎么调整_CAD填充比例调好了,填充物数量怎么调,就是密度怎么调?...
  8. 从HTTP的安全问题到HTTPS
  9. 经典怀旧FCgame红白机小游戏在线网页合集版畅玩HTML网站源码
  10. CentOS 5设置千兆网卡
  11. vba 跳出for循环_ExcelVBA的三重FOR循环退出
  12. mySQL提取姓氏_MySQL 提取姓名大写首字母缩写
  13. 在学习计算机编程不写代码_使用代码创建:通过制作游戏来学习和教授计算机编程
  14. ilog jrues规则开发流程
  15. 【传感器大赏】3轴模拟加速度传感器
  16. 行业动荡, 犹如浮萍
  17. 多个快递单号重复了,该怎么快速查询到全部物流
  18. kinslideshow使用时图片和a标签不能换行,否则。无法实现无缝滚动。
  19. nmap:网络探测工具和安全/端口扫描器
  20. Pandas读书笔记

热门文章

  1. 火狐浏览器书签(收藏夹)全部消失,历史记录也消失,如何恢复
  2. OpenGL开发学习指南二(glfw+glad)
  3. FFmpeg音频编解码处理
  4. linux route命令详解
  5. 高性能I/O设计模式Reactor和Proactor
  6. sed、awk、xargs正则表达式
  7. 转载一篇开源http服务器(C语言)
  8. 4kyu Sums of Perfect Squares
  9. 安装gcc 4.8.2 for cxx 11
  10. 7-1 最大子列和问题