玩转LiteOS组件:Openexif
摘要:OpenExif是用于访问Exif格式的JPEG图像文件的面向对象的库。
本文分享自华为云社区《LiteOS组件尝鲜-玩转Openexif》,作者: W922 。
基本信息
Exif:Exchangeable image File Format。用于记录数码照片的属性信息和拍摄数据,例如厂商、分辨率、ISO、白平衡、饱和度、锐度等。然后将这些信息按照JPEG文件标准放在图像文件头部。
Exif实际上也是JPEG文件的一种,遵循JPEG标准,只是在头文件中增加了有关拍摄信息的内容和索引图。通俗来说Exif信息就是由数码相机在拍摄过程中采集一系列信息镶嵌在JPEG/TIFF文件内的一组参数。
OpenExif是用于访问Exif格式的JPEG图像文件的面向对象的库。该工具包允许在Exif文件中创建,读取和修改元数据,详情请参考Openexif。
LiteOS中提供对C++的支持,并提供Openexif Demo来演示如何使用Openexif。
目前暂时只支持以下开发板运行Openexif Demo:
- STM32F769
使能Openexif Demo
在LiteOS源码根目录下根据实际使用的开发板,拷贝tools/build/config/目录下的默认配置文件${platform}.config到根目录,并重命名为.config。
继续在LiteOS源码根目录下执行make menuconfig命令,按如下菜单路径使能C++支持和Openexif Demo。
Kernel --->
[*] Enable Extend Kernel
[*] C++ Support Demos --->
Media Demo --->
[*] Enable Openexif Demo
使能Openexif Demo后,LiteOS会去下载Openexif源码,并打入patch。
注意:
如需开启C++ thread特性,需要使能LOSCFG_LIB_CPP_EXTEND。并动态调整Task Defalut Stack Size的大小。
Kernel --->
Basic Config --->
Task --->
(4096)Task Defalut Stack Size
Lib --->
[*] Enable libc++ extend
使能LOSCFG_LIB_CPP_EXTEND后,LiteOS会去下载libstdc++源码。
保存退出后,LiteOS会从github上自动下载Openexif源代码,并从gitee上下载适配于LiteOS系统的patch包,并打入patch。 详细流程在components/download.sh文件中。
编译运行Openexif Demo
1.需要一张SD卡,并在SD卡中放入一张测试图片。
注意: 由于嵌入式设备内存有限,文件过大可能导致打开失败,大小限制在100kb以下即可。
2.修改demos/media/openexif/openexif_demo.cpp文件中DEMO_FILENAME为
放入SD卡的图片文件名。本Demo所用文件名为/fatfs/test.jpg,可根据实际自行修改。
#define DEMO_FILENAME "/fatfs/test.jpg"
3.使能Openexif Demo后,在LiteOS源码根目录下执行make clean; make
-j命令编译LiteOS工程,编译成功后会在out/${platform}/lib路径下生成openexif.a和openexif_demo.a文件,系统镜像文件为Huawei_LiteOS.bin。
注意: 选择不同开发板out路径会有不同。
4.烧录系统镜像文件到开发板中可以看到如下运行结果。
********Hello Huawei LiteOS******** LiteOS Kernel Version : 5.0.0
build data : Apr 20 2021 17:05:27 **********************************
osAppInit
cpu 0 entering scheduler
app init!
Hello, welcome to liteos demo!
Openexif demo task start to run.
file system mount success
"Exif" entries:
IFD: 0 Idx: 0
Tag# Type Count Value
282 5 1 72
283 5 1 72
296 3 1 2
531 3 1 1
34665 4 1 90
IFD: 0 Idx: 0
IFD: 34665 Idx: 0
Tag# Type Count Value
36864 7 4 [48,50,49,48]
37121 7 4 [1,2,3,0]
40960 7 4 [48,49,48,48]
40961 3 1 1
40962 4 1 0
40963 4 1 0
Openexif demo task finished. Huawei LiteOS #
可以看到Openexif Demo会去读取图片文件的元数据,并打印出来。
其他更多关于exif的信息请参考Exif。
结语
未来我们还会持续新增更多组件、开发板、架构、特性等。
感谢您的阅读,有任何问题、建议,都可以留言给我们,让我们一起进步: https://gitee.com/LiteOS/LiteOS/issues
更多学习内容,请关注IoT物联网社区
添加华为云IoT小助手微信号(hwc-iot),回复“阅读”获取更多资讯
玩转LiteOS组件:Openexif的更多相关文章
- 一起玩转玩转LiteOS组件:TinyFrame
摘要:TinyFrame是一个简单的用于解析串口(如 UART.telnet.套接字等)通信数据帧的库. 本文分享自华为云社区<LiteOS组件尝鲜-玩转TinyFrame>,作者:Lio ...
- 玩转LiteOS组件:玩转Librws
摘要:Librws是一个跨平台的websocket客户端,使用C语言编写. 本文分享自华为云社区<LiteOS组件尝鲜-玩转Librws>,作者: W922 . 本期小编为大家带来Lite ...
- 带你尝鲜LiteOS 组件EasyFlash
摘要:EasyFlash是一个开源的轻量级嵌入式闪存库. 本文分享自华为云社区<LiteOS组件尝鲜-玩转EasyFlash>,作者:Lionlace . 基本介绍 EasyFlash是一 ...
- 《微信小程序七日谈》- 第三天:玩转Page组件的生命周期
<微信小程序七日谈>系列文章: 第一天:人生若只如初见: 第二天:你可能要抛弃原来的响应式开发思维: 第三天:玩转Page组件的生命周期: 第四天:页面路径最多五层?导航可以这么玩 前两篇 ...
- 《微信小程序七日谈》- 第四天:页面路径最多五层?导航可以这么玩
<微信小程序七日谈>系列文章: 第一天:人生若只如初见: 第二天:你可能要抛弃原来的响应式开发思维: 第三天:玩转Page组件的生命周期: 第四天:页面路径最多五层?导航可以这么玩 微信小 ...
- openstack手动玩转
<一,preface Important Project Network> openstack or all most cloud env Network desgine is so m ...
- react初探(二)之父子组件通信、封装公共组件
一.前言 在组件方面react和Vue一样的,核心思想玩的就是组件,下面举两个组件常用的情景. 场景一:假如我们现在有一个页面包含表格以及多个弹框,这种时候如果将这个页面的业务代码写在一个组件中,那么 ...
- Vue.js之组件(component)
从结构上看,组件之于实例,就好比轮子之于汽车.从属性和方法来看,组件有实例的大部分方法,如果Vue实例是孙悟空,组件就好比实例的一个毫毛,变化多端却为Vue实例所用. 目录: 组件的注册 is的作用 ...
- vue - 组件的创建
组件的创建 vue的核心基础就是组件的使用,玩好了组件才能将前面学的基础更好的运用起来.组件的使用更使我们的项目解耦合.更加符合vue的设计思想MVVM. 那接下来就跟我看一下如何在一个Vue实例中使 ...
- vue.js组件(component)
简介: 组件(Component)是 Vue.js 最强大的功能之一. 组件可以扩展 HTML 元素,封装可重用的代码. 组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面 ...
随机推荐
- MySQL锁:InnoDB行锁需要避免的坑
前言 换了工作之后,接近半年没有发博客了(一直加班),emmmm.....今天好不容易有时间,记录下工作中遇到的一些问题,接下来应该重拾知识点了.因为新公司工作中MySQL库经常出现查询慢,锁等待,节 ...
- JVM-即时编译
即时编译(JIT just in time,默认是开启的)是一项用来提升应用程序运行效率的技术.通常而言,代码会先被 Java 虚拟机解释执行,之后反复执行的热点代码则会被即时编译成为机器码,直接运行 ...
- HTTP请求中浏览器的缓存机制(转)
摘要:在Web开发过程中,我们可能会经常遇到浏览器缓存的问题.本文作者详细解释了浏览器缓存的机制,帮助读者更深层次的认识浏览器的缓存. 流程 当资源第一次被访问的时候,HTTP头部如下 (Reques ...
- JAVA类的加载(5)——总结
总结一下:1.类加载(初始化) 包括加载(类的class文件读入内存,并为之创建一个java.lang.Class对象,由类加载器完成).连接(把类的二进制数据合并到JRE中).初始化(对静态属性进行 ...
- Cookie入门实例
cookie介绍:Cookie通常用于网站记录客户的某些信息,比如客户的用户名.客户的喜好(比如,上一次浏览的宝贝)等.一旦用户下次登录,网站可以获取到客户相关的信息,根据这些客户信息,网站可以对客户 ...
- MyBatis核心流程
摘要 mybatis的核心流程,主要是对于主线的一个探索.目的是对于整个mybatis流程有个初步的印象 核心流程 核心流程搞懂:主线,涉及的模块不深究.再去基础支持层,再回来核心. /** * My ...
- Spring5学习随笔-Spring5的第一个程序(环境搭建、日志框架整合)
第二章.第一个Spring程序 1.软件版本 1.JDK1.8+ 2.Maven3.5+ 3.IDEA2018+ 4.SpringFramework 5.1.4 官网:www.spring.io 2. ...
- 2022.7.15 jiazhaopeng 讲课纪要
前言 由于难度仍然过高,难度再次下调,这节课主要在水绿.这节课讲的是并查集,之所以是以绿题为主是因为上了绿之后的题有一大半都要结合别的东西,初中生不会,所以只能讲的简单一点. ORZ%%% jzp学长 ...
- Android学习day02【页面布局的练习】
在网上找了一些图片,只用最简单的颜色进行区分,目的是熟悉线性布局和相对布局 下面是我找到的简单的Android页面,你也可以尝试以下' 下面是我的实现代码 第一个
- MySQL笔记01: MySQL入门_1.1 MySQL概述
1.1 MySQL概述 MySQL是一个关系数据库管理系统(Relational DataBase Management System,RDBMS).它是一个程序,可以存储大量的种类繁多的数据,并且提 ...