摘要:本文将以Pixman Demo为例,详细说明Pixman的功能。

本文分享自华为云社区《LiteOS组件尝鲜—玩转Pixman》,作者:Lionlace。

基本介绍

Pixman是由三星工程师开发的像素操作库,广泛应用于矢量图形Cario和X服务器等。它能够提供低级像素处理能力,同时具备图像合成、图形变化以及光栅化等功能。本文将以Pixman Demo为例,详细说明Pixman的功能。

该Demo实现功能的步骤:新建一个宽高为20*20的像素图片,将目标图片划分为4个10*10的区域。第一个区域填充蓝色,第二个区域填充蓝粉渐变色,第三个区域填充径向渐变色,第四个区域填充圆形渐变色,最后输出图形到pixman.png即可。下面将介绍详细步骤。

Demo实现的环境要求

Demo需要FATFS文件系统和LIBPNG支持,可在已支持该文件系统的开发板上运行,目前已适配STM32F769IDISCOVERY开发板。

使能Pixman Demo

拷贝并重命名配置文件

在LiteOS源码根目录下根据实际使用的开发板,拷贝tools/build/config/目录下的默认配置文件${platform}.config到根目录,并重命名为.config。以Linux系统和STM32F769IDISCOVERY开发板为例,在LiteOS源码目录下,执行如下命令完成配置文件的拷贝和重命名:

cp tools/build/config/STM32F769IDISCOVERY.config .config

使能Pixman Demo

在LiteOS源码根目录下运行make menuconfig命令,按如下菜单路径使能Pixman Demo:

Demos    --->
Media Demo --->
[*] Enable Pixman Demo (NEW)

使能Pixman Demo后,会自动使能其依赖的Pixman组件、Libpng组件及FATFS文件系统并设置SD卡模式。本Demo中的文件就保存在SD卡中。保存退出menuconfig后,LiteOS会从github上自动下载Pixman源代码,并从gitee的LiteOS组件仓库LiteOS_Components下载对应的patch包,并打入patch。

关于组件下载的详细流程请参考:https://gitee.com/LiteOS/LiteOS_Components#%E5%9C%A8%E7%BA%BF%E7%BB%84%E4%BB%B6%E4%B8%8B%E8%BD%BD%E6%B5%81%E7%A8%8B

注:下载需要Linux主机可以访问互联网,并安装git工具。如果使用LiteOS Studio使能该Demo,需要在组件配置中手动设置FATFS文件系统为SD卡模式。

编译运行Pixman Demo

操作步骤如下:

  • SD卡插入开发板的卡槽内;
  • 参照上述步骤使能Pixman Demo;
  • 在LiteOS源码目录下执行make clean ; make -j命令编译LiteOS工程,编译成功后将在out/${platform}/lib目录下生成Pixman的库文件libpixman.a,Libpng的库文件libpng.a和本Demo的库文件libpixman_demo.a,系统镜像文件为Huawei_LiteOS.bin。以STM32F769IDISCOVERY开发板为例,其目录就是out/STM32F769IDISCOVERY;
  • 烧录系统镜像文件到开发板,复位后可以看到串口输出Demo运行结果如下所示。
********Hello Huawei LiteOS********
LiteOS Kernel Version : 5.0.0
build data : May 14 2021 16:05:30
**********************************
osAppInit
cpu 0 entering scheduler
app init!
Hello, welcome to liteos demo!
File system mount success.
Pixman demo task start to run.
Pixman demo task finished.
Huawei LiteOS #
  • 查看SD卡根目录,可以看到生成的图片文件为pixman.png。

至此,该Demo实现功能就完成了。

结语

未来我们还会持续新增更多组件、开发板、架构、特性等。

感谢您的阅读,有任何问题、建议,都可以留言给我们,让我们一起进步:https://gitee.com/LiteOS/LiteOS/issues。

为了更容易找到“LiteOS”代码仓,建议访问https://gitee.com/LiteOS/LiteOS,关注“ Watch”、点赞“Star”、并“Fork”到自己账号下,如图所示。

更多学习内容,请关注IoT物联网社区 

点击关注,第一时间了解华为云新鲜技术~

一起玩转LiteOS组件:Pixman的更多相关文章

  1. 一起玩转玩转LiteOS组件:TinyFrame

    摘要:TinyFrame是一个简单的用于解析串口(如 UART.telnet.套接字等)通信数据帧的库. 本文分享自华为云社区<LiteOS组件尝鲜-玩转TinyFrame>,作者:Lio ...

  2. 玩转LiteOS组件:玩转Librws

    摘要:Librws是一个跨平台的websocket客户端,使用C语言编写. 本文分享自华为云社区<LiteOS组件尝鲜-玩转Librws>,作者: W922 . 本期小编为大家带来Lite ...

  3. 带你尝鲜LiteOS 组件EasyFlash

    摘要:EasyFlash是一个开源的轻量级嵌入式闪存库. 本文分享自华为云社区<LiteOS组件尝鲜-玩转EasyFlash>,作者:Lionlace . 基本介绍 EasyFlash是一 ...

  4. 《微信小程序七日谈》- 第三天:玩转Page组件的生命周期

    <微信小程序七日谈>系列文章: 第一天:人生若只如初见: 第二天:你可能要抛弃原来的响应式开发思维: 第三天:玩转Page组件的生命周期: 第四天:页面路径最多五层?导航可以这么玩 前两篇 ...

  5. 《微信小程序七日谈》- 第四天:页面路径最多五层?导航可以这么玩

    <微信小程序七日谈>系列文章: 第一天:人生若只如初见: 第二天:你可能要抛弃原来的响应式开发思维: 第三天:玩转Page组件的生命周期: 第四天:页面路径最多五层?导航可以这么玩 微信小 ...

  6. openstack手动玩转

    <一,preface Important Project Network> openstack or all most cloud env Network desgine  is so m ...

  7. react初探(二)之父子组件通信、封装公共组件

    一.前言 在组件方面react和Vue一样的,核心思想玩的就是组件,下面举两个组件常用的情景. 场景一:假如我们现在有一个页面包含表格以及多个弹框,这种时候如果将这个页面的业务代码写在一个组件中,那么 ...

  8. Vue.js之组件(component)

    从结构上看,组件之于实例,就好比轮子之于汽车.从属性和方法来看,组件有实例的大部分方法,如果Vue实例是孙悟空,组件就好比实例的一个毫毛,变化多端却为Vue实例所用. 目录: 组件的注册 is的作用 ...

  9. vue - 组件的创建

    组件的创建 vue的核心基础就是组件的使用,玩好了组件才能将前面学的基础更好的运用起来.组件的使用更使我们的项目解耦合.更加符合vue的设计思想MVVM. 那接下来就跟我看一下如何在一个Vue实例中使 ...

  10. vue.js组件(component)

    简介: 组件(Component)是 Vue.js 最强大的功能之一. 组件可以扩展 HTML 元素,封装可重用的代码. 组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面 ...

随机推荐

  1. 从零开始搭建antd4.x + react16 + redux4 + webpack4 + react-router5基础框架解析

    以上是2020年10月份的版本,后来,我将xmind进行了完善,文档也写的差不多了,可是,电脑坏了,硬盘换了,文件都没有了.这已经是第三次写这个文档了,思维导图就不更新了,按照几个重点进行说明. 这个 ...

  2. 二。docker安装mysql 并配置

    1.docker安装mysql 1.1使用docker拉取mysql的镜像 docker pull mysql:5.7 1.2通过镜像启动 docker run -p 3306:3306 --name ...

  3. Halcon、HDevelop快速入门

    ​ HDevelop基础一 HDevelop概述 HDevelop是一款机器视觉的集成开发环境.下面将对HDevelop的界面内容做一下简单的介绍. 界面介绍 打开HDevelop,将看到以下画面. ...

  4. 多数元素 (3.12 leetcode每日打卡)

    给定一个大小为 n 的数组,找到其中的多数元素.多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素. 你可以假设数组是非空的,并且给定的数组总是存在多数元素. 示例 1: 输入: [3,2,3] ...

  5. C语言判断输入的正整数是否既是5又是7的整倍数。

    #include<stdio.h> void main() { int n;//定义变量 while (1) { scanf_s("%d", &n); if ( ...

  6. Lucene和索引

    全文索引的原理: 是 扫描每个词 对每个词创建索引,指明这个词在文章出现的次数和位置 全文检索的流程:对 检索的对象(文章,文档,网页内容) 预先建立 文档域 和 索引域 ,在索引域会分词创建索引,然 ...

  7. [ABC265A] Apple

    Problem Statement A fruit store sells apples. You may perform the following operations as many times ...

  8. Java在指定路径下执行cmd命令的方法

    目前状态:毕业设计ing 背景: 做毕设时,由于需要将python的运行效果展示出来,所以使用了Java写了一个前端的界面.但是在使用Java对python的脚本进行调用时就尴尬了,出错-- 这里也许 ...

  9. 解密Prompt系列21. LLM Agent之再谈RAG的召回信息密度和质量

    话接上文的召回多样性优化,多路索引的召回方案可以提供更多的潜在候选内容.但候选越多,如何对这些内容进行筛选和排序就变得更加重要.这一章我们唠唠召回的信息密度和质量.同样参考经典搜索和推荐框架,这一章对 ...

  10. C#如何对List中的Object进行排序

    首先定义一个List类,这个类里面包含了Name和Total两个属性变量,下面就是针对这两个变量进行排序. public class Player { public string Name { get ...