Android ApiDemos示例解析(57):Graphics->CameraPreview

  次阅读 作者:智能小宝 来源:互联网 2015-09-29 10:17 我要评论(0)

本例介绍了如何使用设备的摄像头来预览将要拍摄的照片,本例需要真实的手机来运行:

例子中用到两个方面的知识:SurfaceView 和android.hardware.Camera。

SurfaceView 为View的子类,它提供一个专门用于绘图的Surface,目的是允许使用工作线程中这个Surface上绘图,这样对于应费时的绘图操作无需放在UI线程中,而是可以在单独的工作线程中按照自己的节奏来绘图。

使用SurfaceView时需要从SurfaceView派生一个子类,这个子类需要实现SurfaceHolder.Callback接口,这个接口提供了几个回调函数用于通知应用关于Surface的消息,如什么时候创建,改变大小,销毁等。实现这些回调函数非常重要,应用可以在这些回调函数来调整Surface的一些说明,知道何时可以在Surface绘制等。通常在这个SurfaceView的派生类中会定义一个工作线程用于绘图。

在Surface上绘图时,不是通过直接的函数调用,而是通过获取Surface句柄(SurfaceHolder)的间接方法.因此在Surface初始化时,调用getHolder()来获取Surface的句柄。通常是在获取SurfaceHolder之后,再调用mHolder.addCallback(this)来响应SurfaceHolder.Callback事件。

如何使用工作线程中Surface 的Canvas上绘制图形本例没有涉及,将在后面的例子说明。

下面代码定义了SurfaceView子类并实现SurfaceHolder.Callback接口。

[java]

class Preview extends SurfaceView implements SurfaceHolder.Callback {

SurfaceHolder mHolder;

Camera mCamera;

...

public void surfaceCreated(SurfaceHolder holder) {

// The Surface has been created, acquire the

// camera and tell it where

// to draw.

mCamera = Camera.open();

try {

mCamera.setPreviewDisplay(holder);

} catch (IOException exception) {

mCamera.release();

mCamera = null;

// TODO: add more exception handling logic here

}

}

public void surfaceDestroyed(SurfaceHolder holder) {

// Surface will be destroyed when we return,

//so stop the preview.

// Because the CameraDevice object is not a

//shared resource, it's very

// important to release it when the activity is paused.

mCamera.stopPreview();

mCamera.release();

mCamera = null;

}

public void surfaceChanged(SurfaceHolder holder,

int format, int w, int h) {

// Now that the size is known, set up the

//camera parameters and begin

// the preview.

Camera.Parameters parameters = mCamera.getParameters();

List<Size> sizes = parameters.getSupportedPreviewSizes();

Size optimalSize = getOptimalPreviewSize(sizes, w, h);

parameters.setPreviewSize(optimalSize.width, optimalSize.height);

mCamera.setParameters(parameters);

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...