hpdell 发表于 2018-1-14 17:02:03

请教下 ,使用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);                     
            
          }
    }
}
}


butterflyspring 发表于 2018-3-8 17:05:43

我看你已经把alpha功能已经打开了,你只要设置一下具体的alpha值就好了.
DMA2D_Handle.LayerCfg.InputAlpha = 0xFF;   -->这是完全不透明呀..

hpdell 发表于 2018-3-9 15:44:08

butterflyspring 发表于 2018-3-8 17:05
我看你已经把alpha功能已经打开了,你只要设置一下具体的alpha值就好了.
DMA2D_Handle.LayerCfg.InputAlp ...

ok,我试试看
页: [1]
查看完整版本: 请教下 ,使用dma2d的透明功能改如何设置 ?