安卓学习笔记3——摄像头的使用

实验工程:点击打开链接

一. 简介

本节学习目标是使用手机摄像头,并将拍摄到的影像呈现在surfaceView上。


二.相关方法介绍

按照惯例,首先来总结学习下将会用到的类和方法以及相关的基础知识。


1.申请权限

为了使用camera,首先我们需要申请权限,安卓摄像头的权限为android.permission.CAMERA。


2.Camera 类的相关方法

Camera.open(); 打开设备摄像头,并返回一个Camera对象。可以通过返回的对象管理摄像头。

Camera.setPreviewDisplay(SurfaceHolder holder); 设置显示摄像头内容的surfaceView,参数为显示surfaceVIew所对应的surfaceHolder。

Camera.startPreview();  开始预览摄像头。即在surfaceView上显示摄像头拍摄信息。

Camera.stopPreview();  关闭摄像头。

Camera.release(); 放开摄像头。


3.surfaceView类的想关方法。

SurfaceView.getHolder(); 获得surfaceHolder对象,surfaceHolder能够对surfaceView进行控制,且能够添加回调函数来监控surfaceView的变化,同时我们也需要获得surfaceHolder来作为Camera.setPreviewDisplay();方法的参数。


public abstract void addCallback (SurfaceHolder.Callback callback) ; 为surfaceHolder添加回调方法,我们可以直接在使用方法的时候new 一个callback或者实现callback的接口SurfaceHolder.Callback;

public abstract void setType (int type); 在早期的安卓中,我们需要这个方法来设置surfaceView的类型,一般值设置为SURFACE_TYPE_PUSH_BUFFERS; 但是在API 11中该方法已经过时,系统会默认为其设置值。这点还需要再实际开发中再进行验证。

surfaceHolder的三个回调函数。

public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) ;
public void surfaceCreated(SurfaceHolder arg0) ;
public void surfaceDestroyed(SurfaceHolder arg0);

 

三. 使用步骤

1.添加权限
首先我们需要在工程,androidMainfest文件中添加权限。
    <uses-permission android:name="android.permission.CAMERA"/>

  近来发现如果将permission添加在application后面可能会有问题,所以以后加permission还是加到application前面吧。

2. 修改XML文件
现在来修改布局。
添加一个surfaceView控件用来显示摄像头内容,两个按钮用来控制摄像头开关。

3.初始化
初始化surfaceView, button, 以及surfaceHolder;
	surfaceView = (SurfaceView) findViewById(R.id.sv);
	startButton = (Button) findViewById(R.id.button1);
	stopButton = (Button) findViewById(R.id.button2);
	surfaceHolder = surfaceView.getHolder();
	surfaceHolder.addCallback(this);
	surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        startButton.setOnClickListener(this);
	stopButton.setOnClickListener(this);

4.初始化camera类
	myCamera = Camera.open();    //获得摄像头对象
	try {
		myCamera.setPreviewDisplay(surfaceHolder);           //将surfaceHolder与camera对象绑定,使camera影像呈现在该surfaceview上。

	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}

5.添加按键响应函数

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.button1:
			if(!isPreview){
				myCamera.startPreview();		//开启预览
				isPreview = true;					
			}
			break;
		case R.id.button2:
			if(isPreview){
				myCamera.stopPreview();
				isPreview = false;
			}
			
			break;

		default:
			break;
		}
		
	}

四. 注意点

在开发中发现,默认情况下camera在surfaceview中的方向与正常方向差了90度,所以需要使用Camera.setDisplayOrientation(90);来调整。surfaceHolder.setType();使用与不使用结果相同。

五. 总结

到这里我们已经完成了摄像头使用的开发,现在就可以将应用安装到手机上来看看效果了。
你好!感谢提问。下面是有关 K210 学习笔记五中串口通信的一些内容: 在 K210 开发板上,串口是一种常见的通信接口,用于将数据从一个设备传输到另一个设备。串口通信通常使用 UART (Universal Asynchronous Receiver/Transmitter) 协议。 要在 K210 上进行串口通信,首先需要使用两个引脚:一个用于接收数据(RX),一个用于发送数据(TX)。这些引脚可以通过 GPIO 端口与外部设备连接。 在 K210 的开发环境中,可以使用 MaixPy 或者 Kendryte Standalone SDK 进行串口编程。 在 MaixPy 中,可以使用 `uart` 模块来进行串口通信。例如,要初始化一个串口对象并设置波特率为 115200,可以使用以下代码: ```python from machine import UART uart = UART(UART.UART1, 115200) ``` 然后,可以使用 `uart.write()` 函数发送数据,使用 `uart.read()` 函数接收数据。例如: ```python uart.write("Hello, world!\n") data = uart.read(10) ``` 在 Kendryte Standalone SDK 中,可以使用 `uart.h` 头文件中的函数来进行串口通信。例如,要初始化一个串口对象并设置波特率为 115200,可以使用以下代码: ```c #include "uart.h" uart_init(UART_DEVICE_1, 115200); ``` 然后,可以使用 `uart_send_data()` 函数发送数据,使用 `uart_receive_data()` 函数接收数据。例如: ```c uart_send_data(UART_DEVICE_1, "Hello, world!\n", 14); char buffer[10]; uart_receive_data(UART_DEVICE_1, buffer, 10); ``` 以上是关于 K210 学习笔记五中串口通信的简要介绍。如果你有更具体的问题,请随时提问!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值