请教下 ,使用dma2d的透明功能改如何设置 ?
请教下 ,使用dma2d的透明功能改如何设置 ?配置函数如下
static void BMP_DMA2D_ConverBuffer(uint32_t *pSrc, uint32_t *pDst,
uint16_t _usX, uint16_t _usY,
uint16_t _usWidth, uint16_t _usHeight,
uint32_t InputColorMode, uint32_t OutputColorMode)
{
uint32_t source ;
uint32_t destination = 0;
uint16_tOutputOffset = 0; // 行偏移
uint16_tNumberOfLine = 0; // 行数,表示我们显示的数据需要的行数
uint16_tPixelPerLine = 0; // 每行像素数, 每行需要显示多少个像素点
__IO uint32_tXaddrPutPixel = 0;
source = (uint32_t)pSrc;
destination = (uint32_t)pDst;
XaddrPutPixel = (BYTES_PER_PIXEL * (uint32_t)((_usY * LCD_PIXEL_WIDTH) + (_usX)));
OutputOffset =LCD_PIXEL_WIDTH - _usWidth;
NumberOfLine =_usHeight ;
PixelPerLine =_usWidth;
__HAL_RCC_DMA2D_FORCE_RESET(); // 强制复位
__HAL_RCC_DMA2D_RELEASE_RESET(); // 释放复位
DMA2D->CR &= ~DMA2D_CR_START; // 停止dma2d
DMA2D_Handle.Init.Mode = DMA2D_M2M_PFC;
DMA2D_Handle.Init.OutputOffset= OutputOffset; //OutputOffset;
DMA2D_Handle.Init.AlphaInverted = DMA2D_REGULAR_ALPHA;// No Output Alpha Inversion
DMA2D_Handle.LayerCfg.AlphaMode = DMA2D_REPLACE_ALPHA;
DMA2D_Handle.LayerCfg.InputAlpha = 0xFF;
DMA2D_Handle.Init.RedBlueSwap = DMA2D_RB_REGULAR;
DMA2D_Handle.XferCpltCallback= NULL;
DMA2D_Handle.LayerCfg.InputColorMode = InputColorMode; // 输入颜色模式
DMA2D_Handle.Init.ColorMode = OutputColorMode;// 输出颜色模式
DMA2D_Handle.LayerCfg.InputOffset = 0;
DMA2D_Handle.LayerCfg.RedBlueSwap = DMA2D_RB_REGULAR; /* No ForeGround Red a Blue swap */
DMA2D_Handle.LayerCfg.AlphaInverted = DMA2D_REGULAR_ALPHA; /* No ForeGround Alpha inversion */
DMA2D_Handle.Instance = DMA2D;
if(HAL_DMA2D_Init(&DMA2D_Handle) == HAL_OK)
{
if(HAL_DMA2D_ConfigLayer(&DMA2D_Handle, 1) == HAL_OK)
{
uint32_t timeout = 0;
if (HAL_DMA2D_Start(&DMA2D_Handle, source, destination + XaddrPutPixel, PixelPerLine, NumberOfLine ) == HAL_OK)
{
while((DMA2D->ISR & (DMA2D_FLAG_TC)) == 0) //等待传输完成
{
timeout++;
if(timeout > 0X1FFFFF) break; //超时退出
}
__HAL_DMA2D_CLEAR_FLAG(&DMA2D_Handle, DMA2D_FLAG_TC | DMA2D_FLAG_CTC);
DMA2D_Handle.State = HAL_DMA2D_STATE_READY;
__HAL_UNLOCK(&DMA2D_Handle);
}
}
}
}
我看你已经把alpha功能已经打开了,你只要设置一下具体的alpha值就好了.
DMA2D_Handle.LayerCfg.InputAlpha = 0xFF; -->这是完全不透明呀.. butterflyspring 发表于 2018-3-8 17:05
我看你已经把alpha功能已经打开了,你只要设置一下具体的alpha值就好了.
DMA2D_Handle.LayerCfg.InputAlp ...
ok,我试试看
页:
[1]