打印
[STM32F4]

【STM32F469I】试用-关于Blending的测试

[复制链接]
1529|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
znsword|  楼主 | 2015-12-31 17:39 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 znsword 于 2015-12-31 17:39 编辑

测试STM32F469I的Blending的功能:测试使用的例子是:..\STM32Cube\Repository\STM32Cube_FW_F4_V1.10.0\Projects\STM32469I-Discovery\Examples\LCD_DSI\LCD_DSI_CmdMode_SingleBuffer

LTDC允许开启两个图层。图层混合功能是一直开启的,渲染的顺序是固定的,由下至上。如果两个图层都被使能了,那么背景颜色先与第一个图层混合,混合后的结果再与第二个图层混合。
计算公式:


按照公式中的说明,首先修改stm32469i_discovery_lcd.c中的BSP_LCD_LayerDefaultInit()
  Layercfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA;
  Layercfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA;
将blending因子改为constant_alpha,其数值就是Layercfg.Alpha/255(用户需要设置Alpha,除以255由硬件完成)。这时,首先将第一层和背景做blending,计算方法为:
cb1 = c1 * constant_alpha + ( 1 - constant_alpha ) * cb
例子中设置的Alpha = 255,而背景色为黑色,所以blending之后就是保持原颜色不变。
如果将Alpha的值改小,会发现图像变暗。


接着打开第二层
  /* Initialize LTDC layer 0 iused for Hint */
  BSP_LCD_LayerDefaultInit(0, LAYER0_ADDRESS, 100);
  BSP_LCD_SelectLayer(0);     
  /* Display example brief   */
  LCD_BriefDisplay();
  CopyBuffer((uint32_t *)Images[0], (uint32_t *)LAYER0_ADDRESS, 240, 160, 320, 240);
  /* Initialize LTDC layer 1 iused for Hint */
  BSP_LCD_LayerDefaultInit(1, LAYER1_ADDRESS, 120);
  BSP_LCD_SelectLayer(1);   
  /*Draw first image */
  CopyBuffer((uint32_t *)Images[1], (uint32_t *)LAYER1_ADDRESS, 240, 160, 320, 240);
由于blending是默认打开,第二层图像的颜色会跟第一层与背景blending之后的颜色再做blending。
cb2 = c2 * constant_alpha + ( 1 - constant_alpha ) * cb1
同样,如果将设置Alpha = 255,那么,cb2 = c2,blending之后颜色不变。


但是,将Alpha分别设置为100,120之后,得到的结果如下图:

这跟我想像的blending不一样。既然增加了第二层的透明度,那么第一层的图像应该和第二层叠加在一起,而不是被第二层完全盖住。
请问各位大虾和童鞋怎么看这个问题?








发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

43

帖子

2

粉丝