3.OSD叠加学习之纵向显示三种颜色

最终实现图:

在这里插入图片描述

实现思路:

在之前的基础上(不了解的同学,请移步之前同系列文章),实现以上效果图思路也很简单。但需要知道,YUV图片像素点是从左往右 一行一行的刷的。所以实现上方图,就需要在 特定偏移量 来个断层。如图:
在这里插入图片描述
Y 分量的话 我们就需要 将每一行的 640 前设为 红色的 Y 分量,640-1280设为绿色的 Y 分量 ,1280-1920 设为蓝色的 Y 分量。在代码中用循环去写就可以了 UV同理 。
在这里插入图片描述

代码编写:

/*纵向显示颜色*/
int LUV_YUV_coloes_change_Vertical(char *pData)
{

    int width_addr          = 0;
    int height_addr         = 0;
    int width               = 0;
    int height              = 0;
    int width_ch            = LUX_YUV_WIDTH / LUX_YUV_NUM;
    const int vDataStart    = LUX_Y_ALL_SIZE + 960 * 540;

    LUX_YUV_ALL_ST *pColour = NULL;
    pColour = (LUX_YUV_ALL_ST *)malloc(sizeof(LUX_YUV_ALL_ST));
    if (NULL == pColour) 
    {
        perror("malloc pColour error");
        return -1;
    }


    LUX_YUV_RGB2YUV(255,0,0,&pColour->colour[0]);
    LUX_YUV_RGB2YUV(0,255,0,&pColour->colour[1]);
    LUX_YUV_RGB2YUV(0,0,255,&pColour->colour[2]);

    for(height = 0; height < LUX_YUV_HEIGHT; height++)
    {
       
        for(width = 0; width < LUX_YUV_NUM; width++)
        {
            width_addr    = width*width_ch;
            height_addr   = height*LUX_YUV_WIDTH;
    
            memset(pData + height_addr + width_addr,pColour->colour[width].LUX_YUV_Y,width_ch);
        }
        
    }
     for(height = 0; height < LUX_YUV_HEIGHT/2; height++)
    {
       
        for(width = 0; width < LUX_YUV_NUM; width++)
        {
            width_addr    = width*width_ch/2;
            height_addr   = height*LUX_YUV_WIDTH/2;
                
            memset(pData + LUX_Y_ALL_SIZE + width_addr + height_addr,pColour->colour[width].LUX_YUV_U,width_ch/2);
            memset(pData + vDataStart + width_addr + height_addr,pColour->colour[width].LUX_YUV_V,width_ch/2);
        }
        
    }

    free(pColour);
    
    return 0;
}

纵向显示最主要的就是偏移量控制的问题,只要确定了偏移量,就简单了。

注:整个工程在最后一起上传。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值