详细设计说明书
软件详细设计说明书例

软件详细设计说明书例一、引言在软件开发过程中,详细设计是连接概要设计和编码实现的重要环节。
它为软件的编码提供了具体的指导,包括模块的内部结构、算法、数据结构、接口等方面的详细描述。
本文将以一个简单的学生管理系统为例,展示一份软件详细设计说明书的范例。
二、软件概述(一)软件名称学生管理系统(二)软件功能1、学生信息管理:包括学生基本信息的录入、修改、查询和删除。
2、课程管理:课程信息的添加、修改、查询和删除。
3、成绩管理:学生成绩的录入、查询和统计分析。
三、模块设计(一)学生信息管理模块1、学生信息录入子模块输入:学生的学号、姓名、性别、出生日期、班级等信息。
处理:对输入的信息进行合法性校验,如学号的唯一性检查、出生日期的格式检查等。
将合法的信息保存到数据库中。
输出:提示信息,如“录入成功”或“录入失败,请重新输入”。
2、学生信息修改子模块输入:要修改的学生学号和修改后的信息。
处理:根据学号查询出对应的学生信息,将修改后的信息更新到数据库中。
输出:提示信息,如“修改成功”或“修改失败,请重新输入”。
3、学生信息查询子模块输入:查询条件,如学号、姓名、班级等。
处理:根据查询条件从数据库中检索出符合条件的学生信息。
输出:查询结果,以列表形式展示学生的基本信息。
4、学生信息删除子模块输入:要删除的学生学号。
处理:根据学号从数据库中删除对应的学生信息。
输出:提示信息,如“删除成功”或“删除失败,请重新输入”。
(二)课程管理模块1、课程信息添加子模块输入:课程编号、课程名称、学分、授课教师等信息。
处理:对输入的信息进行合法性校验,如课程编号的唯一性检查。
将合法的信息保存到数据库中。
输出:提示信息,如“添加成功”或“添加失败,请重新输入”。
2、课程信息修改子模块输入:要修改的课程编号和修改后的信息。
处理:根据课程编号查询出对应的课程信息,将修改后的信息更新到数据库中。
输出:提示信息,如“修改成功”或“修改失败,请重新输入”。
软件工程国家标准文档——详细设计说明书

测试要点:
4 4.1
(可制作有关用户界面图集的附录参考) 4.2
1112项目的委托单位开发单位主管部门与其它项目的关系与其他机构的关系等13相关项目计划合同及上级机关批文引用的文件采用的标准等缩写词和名词定义21主要表示程序间的调用关系2231编写者
软件工程国家标准文档——详细设计说明书
1.
1.1
1.2 (项目的委托单位、开发单位、主管部门、与其它项目的关系,与其他机构的关系等)
1.3 (相关项目计划、合同及上级机关批文,引用的文件、采用的标准等)
(缩写词和名词定义)
2.
2.1
(主要表示程序间的调用关系)
2.2
3.
3.1
编写者: 编写日期: 第 次修改 修改人: 修改日期: 程序名称:
程序功能取的数据库表和字段:
调用的其它程序:
调用的公共函数库或公共函数: 算法:
软件工程 详细设计说明书

软件工程详细设计说明书1. 引言本文档旨在对软件工程项目的详细设计进行说明。
详细设计是软件开发过程中的重要阶段,其目标是更加具体地描述系统的各个模块和组件,明确它们之间的关系和接口,为后续的编码和测试工作提供指导。
本文档的读者对象主要包括软件开发人员、测试人员和项目经理等相关人员。
通过详细设计说明书的编写,可以帮助团队成员更好地理解系统的架构和设计,提高团队的协作效率,降低后续开发和测试的风险。
2. 需求概述在本部分,我们对软件工程项目的需求进行简要概述,包括项目的目标和功能需求。
通过清晰地描述需求,可以确保详细设计满足项目的需求并提供所需的功能。
2.1 项目目标本项目的目标是开发一个高效、稳定、可扩展的软件系统,满足用户的需求和期望,提供优质的用户体验。
项目中的软件工程设计需要遵循行业标准和最佳实践,确保设计的可维护性和可扩展性。
2.2 功能需求本软件工程项目需要实现以下主要功能:•用户注册和登录功能•数据库管理功能•数据分析功能•用户权限管理功能•数据可视化功能3. 架构设计在本部分,我们将详细描述软件系统的整体架构设计,包括系统的模块划分、模块之间的关系和接口设计等。
通过合理的架构设计,可以确保系统的模块之间的协作顺畅,提高系统的性能和可维护性。
3.1 模块划分基于功能需求,我们将软件系统划分为以下几个模块:1.用户模块:负责处理用户注册、登录和权限管理相关的功能。
2.数据库模块:负责管理系统的数据库,包括数据的增删改查操作。
3.数据分析模块:负责实现数据分析算法和模型,为用户提供分析结果。
4.可视化模块:负责将分析结果可视化展示,提供直观的数据展示效果。
3.2 模块关系和接口设计在本部分,我们将描述各个模块之间的关系和接口设计。
3.2.1 用户模块接口设计用户模块需要与数据库模块和权限管理模块进行交互,包括用户注册、登录和权限验证等功能。
下面是用户模块的接口设计:1.register(username, password): 用户注册函数,接收用户名和密码作为参数,返回注册成功或失败的状态。
软件详细设计说明书

软件详细设计说明书1. 引言本软件详细设计说明书旨在对软件的架构、模块、数据结构、算法等进行详细说明,以便于开发人员进行开发和维护工作。
本文档将介绍软件的总体设计思路、模块划分和模块之间的关系、数据结构和算法的选择、接口设计及其功能和参数的说明等内容。
2. 总体设计本软件旨在实现一个功能强大、可靠性高的软件系统。
为了达到这一目标,我们采用了模块化设计的方式来组织和管理代码。
2.1 模块划分在本软件中,我们将功能划分为以下几个模块:1.用户模块:负责处理用户登录、注册、身份验证等功能。
2.数据库模块:负责与数据库交互,实现数据的增删改查等操作。
3.界面模块:负责用户界面的展示和交互。
4.业务逻辑模块:负责实现各种业务逻辑,如订单管理、库存管理等功能。
每个模块都有明确的职责和接口定义,模块之间通过接口进行通信和数据传递。
2.2 模块之间的关系模块之间的关系如下图所示:用户模块 - 数据库模块|界面模块|业务逻辑模块用户模块与数据库模块之间通过接口进行数据交互,用户模块与界面模块之间通过事件触发和回调函数进行交互,界面模块与业务逻辑模块之间通过函数调用进行交互。
3. 数据结构和算法为了高效地存储和处理数据,我们采用了以下数据结构和算法:•用户数据存储:使用关系型数据库来存储用户信息,采用索引加速查询。
•图形界面:采用MVC模式实现界面的设计和交互,使用栈来实现界面导航。
•业务逻辑处理:使用优化的排序算法和查找算法来处理业务逻辑中的排序和查找操作,提高系统的运行效率。
4. 接口设计在本节中我们将对各个模块的接口进行详细说明。
4.1 用户模块接口用户模块接口定义如下:public interface IUser {// 用户登录public boolean login(String username, String password);// 用户注册public boolean register(String username, String password, String em ail);// 用户身份验证public boolean authenticate(String token);// 用户注销public void logout();}4.2 数据库模块接口数据库模块接口定义如下:public interface IDatabase {// 添加数据public boolean addData(Data data);// 删除数据public boolean deleteData(Data data);// 修改数据public boolean updateData(Data data);// 查询数据public Data queryData(String condition);}4.3 界面模块接口界面模块接口定义如下:public interface IUI {// 显示界面public void show();// 隐藏界面public void hide();// 处理用户交互事件public void handleEvent(Event event);// 设置回调函数public void setCallback(Function callback);}4.4 业务逻辑模块接口业务逻辑模块接口定义如下:public interface ILogic {// 处理订单管理逻辑public void handleOrder(Order order);// 处理库存管理逻辑public void handleInventory(Inventory inventory);// ...}5. 功能和参数说明在本节中我们对软件的各个功能和参数进行详细说明。
详细设计说明书模板

精品整理页脚内容文档编号:____________ 保密级别:____________XXX详细设计说明书所属项目:文件类别:版本号:编写者:审核者:批准者:修订记录目录1引言 (3)1.1编写目的 (3)3 1.3参考资料 (3)1.432 (4)2.142.242.34 2.442.5 (4)3 (4)3.143.254总体方案确认 (5)4.1系统总体结构确认 (5)4.2系统详细界面划分 (5)4.2.1应用系统与支撑系统的详细界面划分 (5)4.2.2系统内部详细界面划分 (5)5 (6)5.1 (6)5.2 (6)5.365.3.175.3.275.3.376 (7)6.176.276.376.3.176.3.276.3.386.3.486.3.586.3.687 (8)7.187.28 1引言1.1编写目的说明编写详细设计方案的主要目的。
说明书编制的目的是说明一个软件系统各个层次中的每个程序(每个模块或子程序)和数据库系统的设计考虑,为程序员编码提供依据。
如果一个软件系统比较简单,层次很少,本文件可以不单独编写,和概要设计说明书中不重复部分合并编写。
方案重点是模块的执行流程和数据库系统详细设计的描述。
1.2背景应包含以下几个方面的内容:A. 待开发软件系统名称;B. 该系统基本概念,如该系统的类型、从属地位等;C. 开发项目组名称。
1.3参考资料列出详细设计报告引用的文献或资料,资料的作者、标题、出版单位和出版日期等信息,必要时说明如何得到这些资料。
1.4术语定义及说明列出本文档中用到的可能会引起混淆的专门术语、定义和缩写词的原文。
2设计概述2.1任务和目标说明详细设计的任务及详细设计所要达到的目标。
2.2需求概述对所开发软件的概要描述, 包括主要的业务需求、输入、输出、主要功能、性能等,尤其需要描述系统性能需求。
2.3运行环境概述对本系统所依赖于运行的硬件,包括操作系统、数据库系统、中间件、接口软件、可能的性能监控与分析等软件环境的描述,及配置要求。
详细设计说明书

详细设计说明书1.导言(Introduction)本章对该文档的目的、功能范围、术语、相关文档、参考资料、版本更新进行说明。
1.1 目的(Purpose)本文档的目旨在推动软件工程的规范化,使设计人员遵循统一的详细设计书写规范,节省制作文档的时间,降低系统实现的风险,做到系统设计资料的规范性与全面性,以利于系统的实现、测试、维护、版本升级等。
详细设计的详细程度,应达到可以编写程序的程度。
1.2 范围(Scope)本文档用于软件设计阶段的详细设计,它的上游(依据的基线)是《概要设计说明书》,它的下游是源程序清单及单元测试计划,并为单元测试报告提供测试依据。
该范围应覆盖《概要设计说明书》中的功能点列表、性能点列表、接口列表。
软件详细设计的范围是:各子系统的公用模块实现设计、专用模块实现设计、存储过程实现设计、触发器实现设计、外部接口实现设计、部门角色授权设计、其他详细设计等。
按照3层结构(B/A/S)的布局,详细设计应从下面3个方面进行。
数据库服务器上的面向数据的设计:数据字典物理设计、基本表物理设计、中间表物理设计(报表设计)、临时表物理设计、视图物理设计、存储过程物理设计、触发器物理设计。
应用服务器上的面向业务逻辑的设计:接口数据设计、中间件设计、数据通信传输设计、可视构件设计、非可视构件设计、角色授权设计、功能点设计(功能点列表设计)。
浏览器上的面向对象的设计:录入修改界面设计、浏览查询界面设计、登录注册界面设计、信息发布界面设计。
1.3 术语定义(Terms Glossary)术语定义,如表6-16所示。
表6-16 术语定义1.4 参考资料(References)[1] 《概要设计说明书》[2] 《需求分析说明书》[3] 《软件合同》[4] 命名规范[5] 程序设计规范[6] 界面设计规范1.5 相关文档(Related Documents)[1] 源程序清单[2] 单元测试计划及报告[3] 《用户使用手册》1.6 版本更新记录(V ersion Updated Rcord)版本更新记录,如表6-17所示。
详细设计说明书的主要内容及写作要求

-详细设计说明书的主要内容及写作要求编写目的详细设计(又可称程序设计机)说明书编制的目的是说明一个软件系统各个层次中的每个程序(每个模块或子程序)的实际考虑,为程序员编写程序提供依据。
如果一个软件系统比较简单,层次很少,本文件可以不单独编写,和概要设计机说明书中不重复部分合并编写,文档名称为《软件设计说明书》。
主要内容及写作要求详细设计说明书主要内容及写作要求如下:1 引言目的。
说明编制本详细设计说明书的目的。
背景列出本项目的任务提出者、项目负责人、系统分析员、系统设计员、程序设计员、程序员、资料员以及与本项目开展工作直接有关的人员和用户。
参考资料A. 列出本项目经核准的任务书或合同和上级机关的批文。
B. 列出编写本设计说明书时参考的文件、资料、技术标准以及它们的作者、标题、编号、发布日期和出版单位等。
术语列出本详细设计说明书中专门术语的定义和英文缩写词的原词组。
;2.软件结构用图表(常用系统流程图的层次结构表示)的形式列出本软件的各模块和程序单元的名称以及它们的相互关系。
3 模块设计说明模块 n结构(n是模块序号)将概要设计产生的功能模块进行细化,形成若干个可编程的程序单元(用图表形式给出程序单元的结构)。
算法给出选用的算法和数学公式。
:数据结构用图表描述数据结构。
程序逻辑用框图或过程性描述语言的形式表示各程序单元的控制流程(常用程序流程图表示)。
存储分配和数组分配确定每个模块的存储量及数组定义。
单元说明A. 程序单元标识;}B. 调用方式;A.参数说明。
4、数据结构设计数据结构与模块的关系用图表描述数据结构与模块的关系。
逻辑机结构设计列出所使用的数据结构中每个数据项、记录和文件的标识、定义、长度、及它们之间的关系。
给出所用数据库的数据模式。
物理结构设计列出所使用的数据结构中每个数据项的存储要求、访问方法、存取单位和存取物理关系等。
(完整版)详细设计说明书实例

信息发布系统(详细设计说明书)编写单位:JAVA实践小学期第22组设计人员:版本: 1.0编写日期:2010/9/5目录第一部分、引言 (2)1.1编写目的 (2)1.2背景 (3)1.3定义 (3)3.1程序描述 (5)3.2整体结构 (5)3.3性能 (5)3.4输入输出项 (5)3.5算法 (5)3.6主要类的设计 (5)3.7存储分配 (7)3.8注释 (7)3.9限制条件 (7)3.10测试计划 (7)3.11尚未解决的问题 (7)4.1程序描述 (7)4.2功能 (7)4.3性能 (8)4.4输入输出项 (8)4.5限制条件 (8)5设计特点 (8)5.1 通信便捷 (8)5.2 开发速度快 (8)第六部分、项目分工 (8)附录: (9)第一部分、引言1.1编写目的本说明书在概要设计的基础上,对信息发布系统的各模块、程序分别进行了实现层面上的要求和说明。
软件开发小组的产品实现成员应该阅读和参考本说明进行代码的编写、测试。
1.2背景说明:A、软件系统的名称:信息发布系统B、任务提出者:JA V A实践小学期开发者:第22组成员C、实现完成的系统将可用在所有JA V A虚拟机的个人PC上.为使用者提供信息发布,浏览,评论的方式,沟通各个用户.1.3定义服务器端API :服务器端设计者通过规范的API文档,提供给客户端,以方便客户端的开发,使得同时进行,提高效率,节约时间。
两端通过protocol(协议类)进行通信。
Gson:Google提供的一个类库。
通过使用这个类库,可以把把对象转换成json格式的字符串,以方便在网络中的传输。
也可反向将字符串转换成对象,这样带有方法地操作对象,可以有效,方便地保证信息的沟通。
Json:JavaScript Object Notation,是一种轻量级的数据交换格式。
易于人阅读和编写,同时也易于机器解析和生成。
它基于JavaScript的一个子集,JSON采用完全独立于语言的文本格式,这些特性使得JSON成为理想的数据交换语言。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
疲劳驾驶检测系统详细设计说明书2015年3月13日目录1.引言21.1编写目的 (2)1.2背景 (3)1.3定义 (3)1.4参考资料 (3)2.程序系统的结构43.详细设计63.1程序简单描述 (6)3.2整体结构 (7)3.3性能 (7)3.4输入输出项 (7)3.5算法 (7)3.5.1人脸检测算法73.5.2Otus最佳阈值图像分割法83.5.3Robert Cross边缘检测93.6主要类的说明以及xml配置文件 (9)3.7存储分配 (16)3.8注释 (16)3.9测试计划 (16)3.10尚未解决的问题 (16)1.引言1.1编写目的此说明书在概要设计的基础上,对基于人眼的疲劳检测终端各个模块,程序分别进行了实现层面上的要求和说明。
在以下的详细设计报告中将对在本阶段中队系统所做的所有详细设计进行说明。
主要工作包括:根据软件需求说明书所描述的数据,功能,运行,性能,需求,并依照概要设计说明书所确定的处理流程、总体设计、软件系统的结构设计,逐个模块的程序描述(包括各模块的功能、性能、输入、输出、算法、程序逻辑、接口等)。
软件开发小组的产品实现成员应该阅读和参考此说明书,从而进行代码的编写,测试。
1.2背景说明:A、待开发系统的名称:不规范驾驶检测系统B、开发者:孙艳强陈浩倪四飞用户:驾驶员或者是汽车厂商以及交通管理部门C、项目开发背景:学生工程实践选题1.3定义1、 android-opencv:这是一个在android操作系统上的Opencv开源库,本系统的开发中用到了该库,加快了开发的效率,降低了开发成本。
2、系统:待开发的不规范驾驶检测系统1.4参考资料《软件工程概论》《软件文档编写》《android应用程序设计》《java基础》《opencv教程》《andorid-opencv手册—网页版》2.程序系统的结构本待开发的系统采用的软件层次框图如下图所示:在前期的方案确定的时候,采用的是基于android操作系统的OpencV 开源库,因此只需要将编译好的OpenCV库导入到开发环境中即可进行开发,因此本系统的主要开发工作集中在应用程序的设计部分。
在项目的概要设计中,确定的具体的软件的主流程方案如下图3.详细设计为了完成系统所需要的功能,我们设计了一个类来实现:FdActivity 说明如下:FdActivity:该类是作为程序的主界面类,在该类中,将surfaceview 占据了整个界面,在该类中主要重写了onCreate()、onPause()、onDestroy()、onCameraViewStarted()、onCameraViewStopped()、onCameraFrame()、onCreateOptionsMenu()、onOptionsItemSelected()、函数具体的分析参见程序的具体描述部分;onCameraFrame()函数:在系统实时监测驾驶员的头像数据的时候,需要显示当前的帧率,该类就是负责帧率的显示的类,该类中,主要是实现了以下的几个功能:从一帧图片中计算人眼的区域绘制人眼的区域3.1程序简单描述打开摄像头,实时采集脸部的帧数据,图像进行灰度变化,首先进行预处理,将背景噪声以及图像中的突刺变化去除,防止影响后面的图形计算精度;利用Opencv中的已有函数接口进行人脸和人眼的定位,在将人眼的轮廓提取出来,这里面的用的方法:Otus和Robert Cross边缘检测。
利用最大垂直距离进行是否闭合的判定,组后再利用PERCLOS原理进行疲劳状态的判断。
3.2整体结构见概要设计说明书3.3性能实时性:能基本实现实时性的要求对人脸的判断准确度:95%以上眼睛的判断准确度:90%以上疲劳识别:80%以上3.4输入输出项输入的数据是:摄像头采集的实时数据输出是:预警声音3.5算法3.5.1人脸检测算法传统的检测人脸分方法有很多种:基于肤色的分离、基于统计模型、或者是PCA方法,但是这些方法识别的时间较长,并且准确率不高,在本文中,采用的是OpenCV中非常成功的基于Haar-Like特征的Adaboost算法。
人脸检测分成两步:首先是训练过程产生分类器文件,再是利用分类器进行人脸检测过程[4]。
训练过程:(1)准备正负样本,正样本是需要检测的目标(正脸),负样本是不含正样本特征的任何目标;(2)利用CreatSample程序准备正样本集;(3)利用Haar-Training程序训练得到分类器特征xml文件。
检测过程:利用android-OpenCV中的分类器构建函数去加载该特征xml文件,利用分类器本身的成员函数[4,5]:detectMultiScale(Mat image,List<Rect> objects, double scaleFactor, int minNeighbors, int flags, Size minSize)对指定的image进行检测。
其函数各参数的意义:Image:需要进行目标检测的区域.Object:将检测到的目标标记在矩形框中.scaleFactor:代表图像的缩放因子.Minneighbors:指定每个候选矩阵至少包含的邻近元素个数.Flag:标志位,默认为0.Minsize:最小的检测窗口,如果该值设置过小,将会导致图像的计算量较大。
3.5.2Otus最佳阈值图像分割法当系统成功标记处人眼部的区域后,需要进行二值化处理,从而实现眼部提取。
但是由于图像的灰度值对光线很敏感,固定的阈值势必无法满足要求,本文采用的是基于Otsu算法的二值化处理。
Otsu算法,又被称为最大类间法,是一种自适应的图像分割技术,它是根据最小二乘原理推导出来的,根据光线强度的不同,阈值会随之变化,能得到最优的阈值[7],其基本原理如下:将直方图在某一阈值进行分割成两组,称为“前景”和“背景”,当被分成的两组的方差最大时候,该阈值就是最佳分割阈值。
方差是灰度均匀分布的一种度量,值越大,说明构成图像两部分的差别越大,当部分“前景”错分为“背景”或者“背景”错分为“前景”的时候,都会导致方差变小,因此最大类间法意味着错分的概率最小。
对于图像直方图,不妨假设其灰度级为0~m ,像素点个数为N ,针对某一个分割阈值t ,那么整个图像被分割成两部分,0~t 称为“前景”,而t+1~m 称为“背景”。
“前景”的权重为Wf ,均值设为Mf ,方差为Df ,“背景”的权重为Wb ,均值设为Mb ,方差为Db 。
图像的整体的方差公式如式3所式。
b b f f D W D W D **+= (3)Otsu 的最终目的就是要求出D 的最大值来,从而得到最优的分割阈值。
3.5.3 Robert Cross 边缘检测边缘是图像灰度值变化剧烈的位置,因此包含了大量的有用信息,常用的边缘检测包含很多,比如:Robert Cross 边缘检测,Canny 边缘检测,Prewitt 边缘检测,Sobel 检测。
但是这些方法中唯有Robert Cross 计算方便简单、快速,容易在实时系统中实现,本系统中采用的就是该检测方法,根据任意一对互相垂直方向上像素点的差分来计算梯度的原理[8,9],采用对角线方向相邻像素灰度差。
如式4所示:|1)+j f(i, - j)1,+f(i | +|1)+j 1,+f(i - j)f(i,| = j)G (i, (4)G 代表的是计算之后的灰度值,而f 代表的是原始图像的灰度值。
虽然Robert 检测速度很快,但是其缺点也是很明显的,对噪声敏感,并且边缘不是很光滑。
3.6 主要类的说明以及xml 配置文件在上面的概述中,我们初步说明了在该系统的实现过程中需要实现的几个类。
在这里我们详细的说明。
//思路:详细写出每个类的每个函数接口的作用以及用法FdActivity:继承Activity,实现了整个应用程序的界面,在该类中主要是定义了两个菜单选项,分别是mItemFace50,mItemFace40,这是选择图像的范围的两个选项,分别对应着50%和40%。
重写onCreate函数,将fdview作为界面加载的部分。
重写onCreateOptionsMenu()函数,将两个菜单选项加入到菜单中;重写onOptionsItemSelected函数,当在屏幕上点击对应的item时,将会自动进行item的选择;Init函数接口是用来进行帧率计算的初始化函数,在该函数中主要实现获取当前的时间--getTickFrequency,以及初始化绘制的文字的颜色信息(blue)以及大小(50)Measure()函数是计算帧率的主要函数,获得当前的时间,减去在init函数中的初始时间,获得这段图像处理的时间,帧率的计算如下:double fps = step * freq / (time - prevFrameTime)再将其按照固定的格式进行输出:DecimalFormat("0.00");Draw函数:就是指在画布上进行绘制的函数:canvas.drawText(strfps, 20 + offsetx, 10 + 50 + offsety, paint)抽象基类MyCvViewBase的设计:这个类主要是为了下面的的具体的fdview类服务的,在该类中,我们是实现了surfaceholder.callback的接口以及runable接口,这样该类就可以作为一个单独的线程去运行了,从而实现了多线程的功能。
在该类的构造函数MyCvViewBase中,我们需要获得holder,添加callback接口,进行FpsMeter的构建。
因为是实现了surfaceholder.callback的接口,因此需要重写三个函数,分别是surfacecreated,surfacechanged,surfacedestroyed。
三个函数中分别要实现的功能:Surfacecreated()这个是在surface刚建立的时候就调用回调函数,在这个函数中,我们需要打开摄像头,在Android-OpenCV中,打开摄像头的接口的函数为mCamera=VideoCapture(ighgui.CV_CAP_ANDROID),检查是否打开,如果已经打开了,那么如下安排:(new Thread(this)).start();否则的话直接release掉camara。
Surfacechaged()函数,是在surfacecreated回调之后进行第一次调用,在这里我们主要是获得摄像头支持的size,然后我们不断选择最优的预览size,(这部分代码是在网上参考的)。
将camara的设置成为:mCamera.set(Highgui.CV_CAP_PROP_FRAME_WIDTH, mFrameWidth);mCamera.set(Highgui.CV_CAP_PROP_FRAME_HEIGHT, mFrameHeight);surfaceDestroyed()回调函数,就是当surface消失的时候进行回调的,因此,这里面我们需要做一些资源的释放的操作,比如说camera释放。