请选择 进入手机版 | 继续访问电脑版

你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【实战经验】GUI方案中ALPHA通道处理介绍

[复制链接]
zero99 发布时间:2017-1-4 17:03
前言3 e) v# K- m+ B. }3 A" ]
伴随着GUI应用在嵌入式领域比重日益增加,STM32专门提供了DMA2D、LTDC以及DSI等外设,能够实现优良的GUI解决方案。本文主要围绕STM32的DMA2D和LTDC展开讨论,介绍图片ALPHA通道的处理事项。
5 g( L) z# i, d2 q( q( x' j6 `
' z: @7 w) H7 p9 ]ALPHA通道简述
( X/ ~2 t+ S  p& TALPHA通道是指一张图片的透明和半透明度。不同颜色格式的图片,具备的ALPHA通道位数有所区别,本文围绕8位的ALPHA通道展开介绍。如下图,为ALPHA通道的几种实例。其中透明度由ALPHA通道值决定。0 R5 C( D  r0 ]3 j7 \
31.jpg 1 y$ v9 e' g1 I/ f/ g
4 N! I; O" d1 ]1 y9 v6 x9 |
STM32图片显示方案介绍) M2 n8 u2 ^9 q2 X2 ?6 y0 r
为了更好的阐述ALPHA通道的作用及相关处理,先对STM32的图片显示进行简单介绍。
8 g5 X& ]4 I: P7 j: i以支持DMA2D和LTDC的STM32为例,图片的数据流如下图所示(为简化介绍,仅以图片生成像素数据,直接对像素数据进行显示的图片显示方案为例)。
* |) k& ^  J( n  K- W* N' _
32.jpg " s# }8 m" \5 s1 y* {  m* a
首先利用PC端工具,将图片转为包含像素数据的文件(例如STemWin中提供的bmpCvt.exe或者bmpCvtST.exe工具,能够将图片导出为包含像素数据的.c文件)。编译链接生成烧录文件,烧录时,对应的像素数据保存到ROM中。然后利用DMA2D实现图片资源的转移,转移到在RAM中开辟的显示缓存空间中。最后,LTDC访问对应的显示缓存空间,实现对RGB接口显示屏的内容刷新,从而实现图片的显示。# Q3 Z# C9 x0 O: ^( c

( G( X  w6 ?4 E( y8 dSTM32 ALPHA通道处理
" ^3 ~/ K) H6 Z8 a4 L上述例中,涉及到两种STM32内部外设DMA2D和LTDC,内部框架如下图所示。! P1 A" G- M* Y' B; r
33.jpg 2 J% K$ E3 f9 [7 b/ |
从图中可以了解到,ALPHA通道在DMA2D和LTDC中都能进行处理。具体在像素格式转化和混合中处理。; @3 I9 \: S0 I' a. w
下面围绕ALPHA通道处理,分环节进行描述。# v# A. H: h% M) G9 x( H7 y( _9 _* j. }

- p: h9 g4 O" O; `- IPC端处理
& @9 L' Z6 I8 y. a; l; z5 d& zALPHA通道在电脑端的处理,除了应用效果上的处理外,主要注意图片导出像素信息时,与硬件平台匹配。
1 v- @7 Z, g) S% C/ y9 I" d例如,bmpCvtST.exe工具为32位真彩色图片,提供了如下两种导出类型。bmpCvtST.exe是bmpCvt.exe的ST版,能够更好的支持STM32平台上图片应用开发。6 a1 |( A2 O* W/ M
34.jpg
) C2 I4 X, n5 }# V& t9 K具体导出何种类型的图片数据.c文件,需要根据采用的STM32 DMA2D外设支持情况进行确定。将在DMA2D处理小结进行说明。一般情况下,ARGB格式与全部支持DMA2D和LTDC的STM32硬件平台匹配。
, i1 b% S3 e7 f+ w' CDMA2D上处理
3 S0 \1 [7 y' k/ ?6 Q如上图,在利用DMA2D进行数据的转移、填充等过程中,支持对ALPHA通道值的更改。在像素格式转换环节,通过DMA2D_xxPFCCR寄存器的配置实现,支持如下三种形式:
9 q3 n3 D+ Y& p1 |1. 保留像素信息原ALPHA通道值
) J$ F! q( q0 c( F0 S. A3 d2. 利用ALPHA@DMA2D_xxPFCCR替换原ALPHA通道值7 X' C0 w! D9 P( Q* N3 U
3. 利用原ALPHA通道值* ALPHA@DMA2D_xxPFCCR / 255 替换原ALPHA通道值
1 f1 {: e2 W) Y8 H7 k& }另外,某些STM32的DMA2D提供了ALPHA通道值取反、RED通道与BLUE通道互换的功能,具体请根据对应STM32的参考手册了解是否支持。具有这种功能的STM32能够匹配上面描述的ABGR类型。
$ w6 e2 w3 _& L6 ~' j在混合环节,虽然涉及到ALPHA通道,但表现为遵循固定的混合公式进行通道混合。在这里不做讨论,详情请参考对应参考手册的DMA2D blender章节。0 D( I7 t# ~4 L6 P( v& j' u
LTDC上处理
. A. g8 Y4 H; J, ]1 d像素格式转化环节,并不涉及可配置的ALPHA通道处理,这里不做讨论。) `3 J3 x2 \  e/ U; k1 N
在混合环节,能够根据不同的混合因子,对各层混合时ALPHA通道进行不同的处理, 实现不同的效果。各层混合流程如下图,采用自下而上的混合方式。) j- {( m( ~7 Q
35.jpg : T8 U3 V6 a* N+ a2 T) g  d/ a4 S
层间混合遵循如下公式:
& b9 u3 a' c$ v1 ]BC = BF1 x C + BF2 x Cs9 [% T/ `( w7 r" B5 K1 A$ |
其中: BC = 混合颜色# R4 c) t) F0 p# G
BF1 = 混合因子1# }4 L4 }6 ]9 A! _/ C
C = 当前层颜色) a4 m! c# i4 K( _% k
BF2 = 混合因子2
/ U# B" p  u  c% ?) l: WCs = 下层混合颜色5 f$ M* n! a1 h0 S; z. x
涉及到的参数,可以进行如下可选的配置,从而执行不同的层级颜色混合。其中BF1、BF2因子决定了对应ALPHA通道处理。
4 M" F9 m. @7 s+ P
36.jpg 7 R( a" q+ |0 M' f9 A, h
例如:当配置层2参数BF1 = 0b100, BF2= 0b100,CONSTA=0xFF时,BC = C。显示效果为不论图片中ALPHA通道值,只显示对应区域上层2的图片,其它层颜色不显示。
( s7 [) b9 ~6 b7 m* m* N( {4 u# I2 `' q4 e# Y+ `
总结
- k3 R$ |( V( J8 K) }图片的转化显示虽然简单,但由于涉及到不同平台,需要注意匹配性问题。实际实现过程中,需要对各环节有一定程度的了解,从而实现同样的显示效果。需知,上述的STM32 GUI方案描述,是针对支持DMA2D和LTDC的STM32。同时,为了聚焦于ALPHA通道的介绍,仅以图片生成的.c文件为例,介绍图片显示方案。除此之外,STM32还提供了其他丰富的GUI方案,能够直接支持各种格式的图片,例如.bmp, .png,.jpg等。
9 u# w& _3 ^. E5 R2 \4 F. ]

3 g. V' ~1 c9 J9 F8 L) s2 e' X
' {# U) c7 K; V9 n6 h% u1 Z) B/ e文档下载
0 \. o* M, c- E4 e3 {! L+ p) {1 x% @
更多实战经验
% T% g5 l8 X' p0 e& I
" K1 M, Y% \* D3 `! L. I
# P% k1 S) V, Q( Q6 F# f
收藏 2 评论5 发布时间:2017-1-4 17:03

举报

5个回答
jackten 回答时间:2017-1-4 18:07:23
谢谢分享                                      
leo121_3006061 回答时间:2017-1-4 20:21:30
谢谢分享
五哥1 回答时间:2017-1-4 23:11:26
这个有些 木有看懂
5265325 回答时间:2017-1-5 08:39:32
andypanfan 回答时间:2017-1-5 08:59:55
谢谢分享
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版