91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

當前HarmonyOS輕設備圖形框架的總體特性介紹

DRXU_gh_019562b ? 來源:HarmonyOS開發(fā)者 ? 作者:HarmonyOS ? 2021-07-28 14:27 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

HarmonyOS輕設備圖形框架概述

HarmonyOS輕設備圖形框架是一款面向帶屏設備界面開發(fā)框架,可運行于LiteOS/Linux/Windows等操作系統(tǒng)之上,除了提供基礎的UI組件外,還提供了獨立的圖形引擎,適用于基于Arm Cortex-M的MCU和低內存資源的ArmCortex-A的芯片之上。

主要特征:

1) 高性能:Arm cortex-M 120MHz級別的CPU下,純軟繪制可達30FPS。

2) 極輕量:Arm cortex-M下,UI框架可支持在ROM《150KB, RAM《30KB硬件條件下運行,支持按需裁剪。

3) 支持多渲染后端:支持自研2D繪制,并且可支持擴展其他三方繪制庫。

4) 支持定制主題:應用程序可以定制主題以覆蓋系統(tǒng)或組件默認主題。同時,支持運行時更改主題。

5) 硬件加速:支持2D硬件加速和SIMD加速,同時可擴展支持具備GPU能力硬件加速。

6) 支持豐富的控件:34個組件(17個容器類型、17個控件類型)。

HarmonyOS輕設備圖形框架簡介

HarmonyOS輕設備圖形框架包括UIKit端和Server端(如圖1所示)。UIKit端運行在應用側,主要處理事件交互、圖片解析、字體整形、2D變換,并根據用戶設置的布局把組件繪制到對應畫布上,生成一幀數據直接送顯或提交給Server端合成;Server端主要負責多窗口管理、多圖層合成、輸入事件管理。

HarmonyOS輕設備圖形框架主要運行于cortex-M MCU級別和RAM資源有限的cortex-A帶屏設備,其中UI框架和渲染部分可獨立運行于M核設備上,多語言矢量字體和Image解碼依賴于硬件能力,一般建議在A核上運行。

662814ea-ec16-11eb-a97a-12bb97331649.jpg

圖1 圖形子系統(tǒng)架構圖1UIKit

UIKit包括組件、動畫、布局、2D變換、2D圖形庫、多語言、圖像解碼庫、渲染多后端、事件和渲染引擎,一共10個子模塊,下面展開介紹前面8個。

1) 組件

當前提供17個容器組件和17個控件組件,滿足大部分頁面開發(fā)場景需求,支持開發(fā)者擴展自定義控件,當前支持控件列表和繼承關系如下:

6658cca2-ec16-11eb-a97a-12bb97331649.jpg

圖2 組件樹圖

2) 動畫

支持Bezier、EaseInBack、EaseOutBack和EaseInOutBack等19種動畫曲線,同時支持開發(fā)者設置自己的動畫曲線;

以緩動函數動畫曲線為例,算法方程和圖像如下:

Back:(s+1)*t^3 - s*t^2

66bcbafa-ec16-11eb-a97a-12bb97331649.png

圖3 緩動函數曲線圖

3) 布局

支持相對布局、百分比布局和簡單的彈性布局。

4) 2D變換

通過3階矩陣變換實現圖片和組件級別的縮放、旋轉和平移;

縮放功能主要在TransformMap類的Scal()函數中體現,通過矩陣變換實現。坐標變換矩陣是一個3*3矩陣,用來對圖形進行坐標變化,從原來的坐標點轉移到新的坐標點。

縮放變換的公式為:

66e6d9b6-ec16-11eb-a97a-12bb97331649.png

坐標矩陣變換公式為:

670aabca-ec16-11eb-a97a-12bb97331649.png

旋轉功能與縮放功能類似,同樣通過3*3矩陣變換實現。主要在TransformMap類中的Rotate()函數中體現。

繞原點逆時針旋轉θ角度的變換公式為:

6733936e-ec16-11eb-a97a-12bb97331649.png

坐標矩陣變換公式為:

6752e50c-ec16-11eb-a97a-12bb97331649.png

如下是對一個ImageView做2D變換的示例代碼:

Rect viewRect = imageView_-》GetOrigRect(); TransformMap transMap(viewRect); // 58:變換相對x坐標 58:變換相對y坐標 Vector2《float》 pivot_(58, 58); if (&view == rotateBtn_) { // 90: 旋轉角度 transMap.Rotate(90, pivot_); } else if (&view == scaleBtn_) { // 1.5:x坐標軸縮放比例 1.5:y坐標軸縮放比例 transMap.Scale(Vector2《float》(1.5, 1.5), pivot_); } else if (&view == translateBtn_) { // 80:x坐標軸平移距離 // -30:y坐標軸平移距離 transMap.Translate(Vector2《int16_t》(80, -30)); } imageView_-》SetTransformMap(transMap);

5) 2D圖形庫

HarmonyOS具備基礎圖形庫,在輕量設備上提供高效2D圖形繪制能力,支持直線、弧、圓、矩形、三角形、貝塞爾曲線等基礎繪制,支持抗鋸齒,針對每一繪制算法做特有的優(yōu)化,以達到軟件繪制最優(yōu)性能。

· 具體代碼路徑可參考:https://gitee.com/openharmony/graphic_ui/tree/master/frameworks/draw

6) 多語言

HarmonyOS輕設備圖形框架已實現47種語言的顯示、換行和整形,滿足設備全球發(fā)行。

676e7e98-ec16-11eb-a97a-12bb97331649.png

多語言整形及渲染流程:

67cb6dce-ec16-11eb-a97a-12bb97331649.png

圖4 多語言整形及渲染時序圖

圖形文本控件:通過SetText接口設置文本,如果參數是UTF8字符串str,則屬于動態(tài)字體的操作方式;如果參數是textId枚舉值,則屬于靜態(tài)字體的操作方式。布局完控件之后,Invalidate操作負責繪制控件。

整形類:根據控件的fontId判斷是否為復雜語言,如果是復雜語言,則要通過整形類進行整形,把UTF8字符串整形成glyph index;否則,把UTF8字符串直接轉換成Unicode。另外,對UTF8字符串做Bidi雙向排版,再獲取字符串的所有換行位置。

動態(tài)字體類:在初始化時加載font.bin,并根據Unicode或glyph index按一定的規(guī)則查找字形參數。

靜態(tài)字體類:在初始化時加載glyphs.bin,并根據Unicode或glyph index按一定的順序查找字形參數。

繪制類:根據字形參數結合color值繪制字形到framebuffer中,并根據Bidi和換行排版進行合理布局。

7) 圖像解碼庫

Cortex-A場景,通過三方庫支持png、jpeg、bmp、gif圖像格式解析處理,但在Cortex-M的MCU場景,受限于硬件能力,通常直接轉換為位圖數據,不做編解碼處理。

8) 渲染多后端

渲染多后端位于UIKit底層,用來適配對接不同芯片平臺硬件能力,各芯片廠商實現多后端接口,UIKit通過調用該抽象層接口以屏蔽芯片差異并發(fā)揮芯片硬件能力。

如下圖5所示,左邊為沒有多后端的UIKit實現,對硬件的使能是嵌入到UIKit框架中的,即針對每一款新的芯片都要對UIKit做相應修改;右邊為有多后端的實現,硬件使能和UIKit分離,即切換新的芯片平臺時,只需要適配層修改,UIKit不用修改。

680a4990-ec16-11eb-a97a-12bb97331649.png

圖5 多后端框架圖

多渲染后端render backends在整體框架中的位置如圖5所示,通過該層,三方渲染庫和圖形可以更高效與系統(tǒng)接口對接。

渲染引擎支持多個繪制后端,支持軟件繪制、2D硬件加速(TDE/DMA2D);對于支持OpenGL的硬件平臺,支持OpenGL后端擴展。

2Server端Server端主要包括窗口管理模塊和事件管理模塊(如圖6所示),該模塊主要用于cortex-A場景下,用于多窗口管理、多圖層合成和底層事件管理。

694451d4-ec16-11eb-a97a-12bb97331649.jpg

圖6 Server端框架圖

1) 多窗口管理

采用C/S架構,不同APP的窗口在服務端統(tǒng)一管理Z序和圖層合成,一個窗口與一個RootView綁定。

2) 多圖層合成

采用C/S架構,接受不同APP提交的圖層數據,使用軟件或硬件合成,把多個圖層疊加并送顯。

3) 底層事件管理

對接底層輸入事件驅動框架,對輸入事件進行監(jiān)聽和分發(fā)。如圖7所示:

6985dc9e-ec16-11eb-a97a-12bb97331649.jpg

圖7 事件消息流圖

● 驅動適配層(driver)

提供原始輸入事件機制

對接底層硬件

● InputManger服務層(IMS)

監(jiān)聽原始輸入事件(InputEventHub)

封裝原始輸入事件(InputEventReader)

分發(fā)事件至目標窗口(InputEventDistributer)

● UIKit客戶端層(client)

監(jiān)聽窗口管理服務輸入事件

生成高級輸入事件

分發(fā)高級輸入事件至視圖組件

運行渲染原理

輕設備GUI采用MainLoop進行驅動,有事件、動效或繪制任務時才處理,無事件輸入時,MainLoop會進入掛起模式,有事件輸入時喚醒循環(huán),達到降低功耗的目的,如圖8左側所示。圖8右側WMS主要功能為處理多窗口管理、多圖層合成和事件管理,App(UIKit)提交一幀數據到WMS,WMS完成多個圖層合成并送顯。App主要功能是循環(huán)處理事件、動效、繪制。沒有事件或動效時,處于掛起模式;有事件或動效時,會操作RootView樹,更新臟區(qū)域,并在Render流程對臟區(qū)域進行重繪。

69c57250-ec16-11eb-a97a-12bb97331649.jpg

圖8 MainLoop框架圖

下面以創(chuàng)建Button頁面為例說明渲染原理。首先創(chuàng)建UIButton,加入到組件樹,進入MainLoop繪制Button頁面。點擊Button界面,MainLoop接受到Input事件,識別事件對應組件,更新臟區(qū)域,進入Render后刷新Button界面,用戶感知到Button點擊變化。RootView樹更新臟區(qū)域及重繪流程參考圖9和圖10時序介紹。

6a059614-ec16-11eb-a97a-12bb97331649.png

圖9 生成臟區(qū)域時序圖

InvalidateRect()臟區(qū)域刷新流程,如圖9所示:

1.循環(huán)遍歷獲取和父節(jié)點的相交區(qū)域,若有,調用RenderManager里InvalidateRect刷新區(qū)域。

2.判斷刷新區(qū)域是否在屏幕顯示范圍,并獲取相交區(qū)域。

3.看invalidRects中待刷新區(qū)域是否包含此區(qū)域。

4.保存到invalidRects中

6a60518a-ec16-11eb-a97a-12bb97331649.png

圖10 渲染時序圖

1.根據臟區(qū)域渲染的Render Task流程:JoinRect:合并invalidRects中重疊較大的區(qū)域。

判斷依據:A的面積 + B的面積 》 A.Inflate(B)的面積

2.DealRect:循環(huán)調用RenderRect,渲染各個invalidRects區(qū)域

RenderRect流程:

1.獲取display buffer,根據display buffer最大buffer size,計算最大行數

2.假如超過一次渲染大小,循環(huán)分段渲染各區(qū)域 RenderPart

3.RenderPart 流程:

1)找到完全覆蓋該區(qū)域的最上層組件

2)刷新這個組件及其子組件相關區(qū)域(假如有相交區(qū)域)

3)循環(huán)遍歷刷新其靠后的兄弟節(jié)點和其parent節(jié)點靠后的兄弟節(jié)點相關區(qū)域(假如有相交區(qū)域)

4)刷新外邊框區(qū)域Shadow等

總結:HarmonyOS輕設備圖形框架還在不斷演進和完善的過程中,本文主要描述的是當前HarmonyOS輕設備圖形框架的總體特性介紹,希望可以幫助各位開發(fā)者了解HarmonyOS輕設備圖形框架的開發(fā)原理,后續(xù)還會推出一系列針對各子特性的詳細介紹文章,歡迎持續(xù)關注。

作者:niulihua、lubo ,華為軟件開發(fā)工程師

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • HarmonyOS
    +關注

    關注

    80

    文章

    2153

    瀏覽量

    36058

原文標題:HarmonyOS輕設備圖形框架運行解析

文章出處:【微信號:gh_019562b5fb4b,微信公眾號:gh_019562b5fb4b】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    申請指定設備發(fā)布Profile

    前提條件 已創(chuàng)建HarmonyOS應用。 已申請發(fā)布證書,并注冊測試設備。 (如需使用ACL權限)已申請并獲取ACL權限。 1.登錄AppGallery Connect,選擇“證書、APP ID
    發(fā)表于 01-13 11:02

    申請指定設備發(fā)布Profile

    前提條件 已創(chuàng)建HarmonyOS應用。 已申請發(fā)布證書,并注冊測試設備。 (如需使用ACL權限)已申請并獲取ACL權限。 操作步驟 登錄AppGallery Connect,選擇“證書、APP
    發(fā)表于 01-12 10:31

    ElfBoard技術貼|如何在【RK3588】ELF 2開發(fā)板移植LVGL8.2

    隨著嵌入式設備圖形用戶界面(GUI)的需求不斷提升,選擇一款高效、量且易于移植的GUI框架已成為項目開發(fā)中的關鍵環(huán)節(jié)。LVGL與Qt作為嵌入式領域廣泛使用的兩種GUI解決方案,在架
    的頭像 發(fā)表于 10-15 08:52 ?5940次閱讀
    ElfBoard技術貼|如何在【RK3588】ELF 2開發(fā)板移植LVGL8.2

    Taro on HarmonyOS 技術架構深度解析

    on HarmonyOS 的技術實現方案、核心優(yōu)化策略,以及開源版本的主要特性。 本文將詳細介紹 Taro on HarmonyOS 的技術架構、性能優(yōu)化實踐和開源進展,分享我們在跨
    的頭像 發(fā)表于 08-04 16:10 ?790次閱讀
    Taro on <b class='flag-5'>HarmonyOS</b> 技術架構深度解析

    HarmonyOS 5】鴻蒙中進度條的使用詳解

    HarmonyOS的ArkUI框架為開發(fā)者提供了多種類型的進度條,每種類型都有其獨特的樣式,以滿足不同的設計需求。以下是幾種常見的進度條類型: 線性進度條(Linear) :這是最常見的進度條樣式,以直線
    的頭像 發(fā)表于 07-11 18:26 ?1145次閱讀
    【<b class='flag-5'>HarmonyOS</b> 5】鴻蒙中進度條的使用詳解

    HarmonyOS 5】鴻蒙星閃NearLink詳解

    HarmonyOS 提供的短距離通信服務,支持星閃設備間的連接、數據交互。例如,手機可作為中心設備與外圍設備(如鼠標、手寫筆、智能家電、車鑰匙等)通過星閃進行連接。 二、Near
    的頭像 發(fā)表于 07-11 18:24 ?1903次閱讀
    【<b class='flag-5'>HarmonyOS</b> 5】鴻蒙星閃NearLink詳解

    HarmonyOS 5 入門系列 】鴻蒙HarmonyOS示例項目講解

    框架的技術變革 在移動操作系統(tǒng)的發(fā)展歷程中,UI 開發(fā)模式經歷了從 命令式到聲明式 的重大變革。 根據華為開發(fā)者聯盟 2024 年數據報告顯示,HarmonyOS 設備激活量已突破 7.3 億臺,其中
    的頭像 發(fā)表于 07-07 11:57 ?1084次閱讀
    【 <b class='flag-5'>HarmonyOS</b> 5 入門系列 】鴻蒙<b class='flag-5'>HarmonyOS</b>示例項目講解

    改善光刻圖形線寬變化的方法及白光干涉儀在光刻圖形的測量

    引言 在半導體制造與微納加工領域,光刻圖形線寬變化直接影響器件性能與集成度。精確控制光刻圖形線寬是保障工藝精度的關鍵。本文將介紹改善光刻圖形線寬變化的方法,并探討白光干涉儀在光刻
    的頭像 發(fā)表于 06-30 15:24 ?971次閱讀
    改善光刻<b class='flag-5'>圖形</b>線寬變化的方法及白光干涉儀在光刻<b class='flag-5'>圖形</b>的測量

    改善光刻圖形垂直度的方法及白光干涉儀在光刻圖形的測量

    引言 在半導體制造與微納加工領域,光刻圖形的垂直度對器件的電學性能、集成密度以及可靠性有著重要影響。精準控制光刻圖形垂直度是保障先進制程工藝精度的關鍵。本文將系統(tǒng)介紹改善光刻圖形垂直度
    的頭像 發(fā)表于 06-30 09:59 ?670次閱讀
    改善光刻<b class='flag-5'>圖形</b>垂直度的方法及白光干涉儀在光刻<b class='flag-5'>圖形</b>的測量

    HarmonyOS入門指南

    上手的HarmonyOS工具庫,借助眾多實用工具類,致力于助力開發(fā)者迅速構建鴻蒙應用。 2、開源框架 harmony-utils 一款功能豐富且極易上手的HarmonyOS工具庫,
    的頭像 發(fā)表于 06-27 00:11 ?793次閱讀

    HarmonyOS next】ArkUI-X休閑益智猜字謎【基礎】

    下圖是在iOS中的運行效果 下圖是在HarmonyOS中的運行效果 今天咱們來聊聊如何用ArkUI-X這個新興框架實現跨端開發(fā),通過一個猜字謎小游戲帶大家感受它的開發(fā)魅力。本文不僅能讓你看到
    發(fā)表于 06-26 20:01

    HarmonyOS NEXT意圖框架習慣推薦一場景說明

    一、概述 意圖框架HarmonyOS系統(tǒng)級的意圖標準體系。將應用和元服務的業(yè)務功能智慧分發(fā)給不同的系統(tǒng)入口,以“音樂播放”為例,HarmonyOS將業(yè)務分發(fā)給“小藝建議”,提供了桌面大流量曝光
    發(fā)表于 06-18 15:06

    ArkUI-X跨平臺應用改造指南

    工作量大幅增加,開發(fā)成本也隨之上升,而且很難保持一致的交互體驗。 ArkUI-X 跨平臺框架是基于 HarmonyOS 打造的跨端跨平臺框架,能實現 “一次開發(fā)、三平臺部署”。 基于ArkTS開發(fā)
    發(fā)表于 06-16 23:05

    京東開源Taro on HarmonyOS C-API版本

    近日,京東正式開源了Taro on HarmonyOS C-API 版本,為鴻蒙應用跨端開發(fā)提供高性能框架。這次版本的發(fā)布,帶來了更豐富的樣式適配、更高效的渲染性能、更全面的組件支持,讓開發(fā)者以Web范式的方式來開發(fā)出媲美鴻蒙性能的應用,為鴻蒙應用生態(tài)的豐富注入強大的動力
    的頭像 發(fā)表于 06-09 09:19 ?1138次閱讀
    京東開源Taro on <b class='flag-5'>HarmonyOS</b> C-API版本

    ?HarmonyOS座艙:貼片電容ESR對多設備協(xié)同供電的影響

    本文以東莞市平尚電子科技有限公司(平尚科技)的AEC-Q200車規(guī)級貼片電容技術為核心,探討HarmonyOS智能座艙多設備協(xié)同供電場景中ESR對系統(tǒng)穩(wěn)定性的影響。通過低ESR導電聚合物材料、三維
    的頭像 發(fā)表于 05-27 14:07 ?692次閱讀
    ?<b class='flag-5'>HarmonyOS</b>座艙:貼片電容ESR對多<b class='flag-5'>設備</b>協(xié)同供電的影響