android camera入门,android 基础一 Camera1 预览、拍照
预览流程: 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 预览、拍照相关推荐
- Android实战技巧之四十七:不用预览拍照与图片缩放剪裁
副标题:Take Picture without preview Android Google出于对隐私的保护,制定了一条门槛,即在Android应用开发中编写拍照程序是必需要有图像预览的.这会对那些 ...
- Android camera(4)---Android Camera开发之基础知识篇
Android Camera开发之基础知识篇 转自:https://blog.csdn.net/feiduclear_up/article/details/51968975#jump5 概述 Andr ...
- Android 音视频开发(三) -- Camera2 实现预览、拍照功能
音视频 系列文章 Android 音视频开发(一) – 使用AudioRecord 录制PCM(录音):AudioTrack播放音频 Android 音视频开发(二) – Camera1 实现预览.拍 ...
- Android 使用CameraX实现预览/拍照/录制视频/图片分析/对焦/缩放/切换摄像头等操作
1. CameraX架构 看官方文档 CameraX架构 有如下这一段话 使用CameraX,借助名为"用例"的抽象概念与设备的相机进行交互. 预览 : 接受用于显示预览的Surf ...
- Android APP Camera2应用(02)预览流程
说明:camera子系统 系列文章针对Android10.0系统,主要针对 camera API2 + HAL3 框架进行解读. 1 预览流程简要解读 @1 由 CameraManager.openC ...
- android拍照功能无预览,Android快速实现无预览拍照功能
本文实例为大家分享了Android实现无预览拍照功能的具体代码,供大家参考,具体内容如下 实现思路: 把预览的SurfaceView的宽高设置为肉眼看不出的值,例如0.1dp,其他的就是自定义相机的标 ...
- Android OTG 连接单反相机,相机无法预览无法拍照片问题修复记录
一开始我用佳能相机链接手机后拍照预览是ok的,后面换成尼康后无法预览拍照,经过一段时间的调试终于解决 Android 手机连接尼康相机后无法实时预览照片问题.其实很简单设置模式问题,就两行行代码搞定: ...
- 骁龙camera预览拍照录像流程 api1和api2
首先说api1的预览流程 CameraActivity的onCreate先区分是不是安全模式(锁屏进入就是安全模式),如果是安全模式会设置flag indowManager.LayoutParams. ...
- Camera 2 最简单的预览拍照保存小白指南
1.Camera 2 的架构图: camera2架构图 Camera2引用了管道的概念将安卓设备和摄像头之间联通起来,系统向摄像头发送Capture请求,而摄像头会返回CameraMetada.这一切 ...
最新文章
- 概率论 第三章 多维随机变量及其分布
- 三国杀服务器改名 插图修改,《三国杀》大幅修改的武将——新旧两版,你更喜欢哪一位...
- 【转】大厦将倾,互联网将如何变革传统行业(上)
- Ubuntu16.04LTS +Qt+boost1.66编译错误:consuming_buffers.hpp: parse error in template argument list...
- oracle数据库下载地址
- Asymptotic I Catalan Number
- cad填充密度怎么调整_CAD填充比例调好了,填充物数量怎么调,就是密度怎么调?...
- 从HTTP的安全问题到HTTPS
- 经典怀旧FCgame红白机小游戏在线网页合集版畅玩HTML网站源码
- CentOS 5设置千兆网卡
- vba 跳出for循环_ExcelVBA的三重FOR循环退出
- mySQL提取姓氏_MySQL 提取姓名大写首字母缩写
- 在学习计算机编程不写代码_使用代码创建:通过制作游戏来学习和教授计算机编程
- ilog jrues规则开发流程
- 【传感器大赏】3轴模拟加速度传感器
- 行业动荡, 犹如浮萍
- 多个快递单号重复了,该怎么快速查询到全部物流
- kinslideshow使用时图片和a标签不能换行,否则。无法实现无缝滚动。
- nmap:网络探测工具和安全/端口扫描器
- Pandas读书笔记