本帖最后由 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不一样。既然增加了第二层的透明度,那么第一层的图像应该和第二层叠加在一起,而不是被第二层完全盖住。
请问各位大虾和童鞋怎么看这个问题?
|