This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于 DM8168 在视频图像指定位置混合字符。 如何设置背景透明度及颜色的问题



目前通过调整设置 AlgLink_OsdChWinParams * chWinPrm 的相关参数 ,可以实现在视频图像指定位置进行指定字符或者动态时间显示。

但想设置显示字符 背景颜色的透明度和 字符的颜色。

尝试更改1  : 修改 chWinPrm->colorKey 的参数 后验证:无效果 

尝试更改2 :  修改 UInt32 padingColor[3] 的参数 后验证:无效果

尝试更改3 :  修改 chWinPrm->winPrm[*].globalAlpha 的参数 后验证:插入的字符跟背景 一块变透明,并没有达到字符透明度不变的情况下单独将背景透明化

实验效果如下图:

请问大佬们如何才能达到将字符(ABCD)颜色可调,字符的背面可以透明化(不遮挡视频)

  • chWinPrm->winPrm[i].transperencyEnable设成1了吗?请参考下面的帖子。
    e2echina.ti.com/.../345289
  • 非常感谢您的解答。

    chWinPrm->winPrm[i].transperencyEnable已经设成1。

    由您推荐的参考帖子可知: colorkey设置的YUV的值,就代表了要完全透明的颜色

    我理解要想把黑色背景透明就将colorkey修改为对应黑色的值

    RGB 黑色为 0 0 0  按照公式:

    Y =  0.257 * R + 0.504 * G + 0.098 * B + 16;

    U = -0.148 * R - 0.291 * G + 0.439 * B + 128;

    V =  0.439 * R - 0.368 * G - 0.071 * B + 128;

    转换成YUV结果为:

    chWinPrm->colorKey[0] = 0x10;    

    chWinPrm->colorKey[1] = 0x80;      

    chWinPrm->colorKey[2] = 0x80;      

    (Demo_text_draw 中使用的padingColor参数暂定为0x0, 0x80, 0x80 ;格式ascii_422i_1078_28)

    实验结果还是没能实现黑色背景透明化

  • 你好,

    能否尝试使用的OSD的图片也为YUV格式,保证背景黑色的YUV值和color key里设定的值完全一样?
  • 非常感谢您的解答

    位图格式使用的是 SYSTEM_DF_YUV422I_YUYV

    衬垫颜色padingColor[3] = { 0x10, 0x80, 0x80 }

    chWinPrm->colorKey[0] = 0x10; 
    chWinPrm->colorKey[1] = 0x80; 
    chWinPrm->colorKey[2] = 0x80;

    transperencyEnable = 1;

    修改后没有效果

    麻烦问一下还有哪里需要注意的吗

  • 你好,

    请问你使用的是DVRRDK4.01么?

  • 您好
    使用的是 DVRRDK-04.01.00.02
  • Demo_text_draw_osd_by_index()函数插入的字符YUV是由 ascii_422i_1078_28_YuvData来找到的。

    chWinPrm->colorKey[] 只能改变插入的YUV图片,不能改变由Demo_text_draw_osd_by_index函数查找ascii_422i_1078_28_YuvData字库生成的字符。

    在实验得知

    在 padPix = lineOffset - pixPerLine;中

    lineOffset 与 pixPerLine值始终相等

    //pending padingColor
    for(j = 0; j < padPix;j+=scaleX)
    {
    *temp++ = padingColor[0];
    *temp++ = padingColor[1];
    *temp++ = padingColor[0];
    *temp++ = padingColor[2];
    }

    for循环始终不能执行,padingColor设置值也是无效的。

    不知道理解的对不对,麻烦大佬们帮忙解答一下,看看如何才能实现插入的字符背景如何更改透明度