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 osd



各位大神 我应该怎么去掉字体中的黑色?

  • chWinPrm->winPrm[winId].format   = SYSTEM_DF_YUV422I_YUYV;

    chWinPrm->winPrm[winId].globalAlpha        = 0x80;

    chWinPrm->winPrm[winId].transperencyEnable = TRUE; 

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

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

  • 你好;

           你这个是通过framebuffer 实现的还是 swosd来实现的;

           这个是没有做透明度的处理导致的。

  • 是通过swosd实现的,我是想通过那个关键色 来做  但是就是其他的黑色透掉了,但是字体周边的没有

  • 你这个需要修改swosd的代码,支持argb 数据格式,a 为透明度参数,这样才可以;

    如果是直接传入 rgb 或者 yuv 数据的时候,本来是黑色的地方(0x00) ,也会被你过滤掉的;

     

    现在的sdk 里面只支持了yuv422i、yuv420sp、rgb ,你还需要支持argb ;

  • inline void SWOSD_TI_algBlendLine
    (
    Int64 * restrict pInA,
    Int64 * restrict pInB,
    Int64 * restrict pOut,
    Int64 * restrict pAlp,
    UInt16 width,
    Bool transperencyEnable,
    UInt32 transperencyColor32,
    UInt32 globalAlpha32
    )
    {
    Int32 len;
    Int64 inB64Val, inA64Val;
    Int64 alp64Val;
    UInt8 *inA8, *inB8, *out8, *gain;
    UInt8 *pTmpB;
    UInt8 *pTmpAlp;

    len = (width)>>3;
    if(transperencyEnable)
    {
    UInt32 i;

    pTmpB = (UInt8*)pInB;
    pTmpAlp = (UInt8*)pAlp;

    for(i=0; i<width/4; i++)
    {
    if(( *pTmpB ) == (UInt8)(transperencyColor32>>0))//与关键色对比
    *pTmpAlp = 0;
    else
    {
    *pTmpAlp = globalAlpha32;
    }

    pTmpAlp++;
    pTmpB++;

    if(( *pTmpB ) == (UInt8)(transperencyColor32>>8))
    *pTmpAlp = 0;
    else
    {
    *pTmpAlp = globalAlpha32;
    }
    pTmpAlp++;
    pTmpB++;

    if(( *pTmpB ) == (UInt8)(transperencyColor32>>16))
    *pTmpAlp = 0;
    else
    {
    *pTmpAlp = globalAlpha32;
    }

    pTmpAlp++;
    pTmpB++;

    if(( *pTmpB ) == (UInt8)(transperencyColor32>>24))
    *pTmpAlp = 0;
    else
    {
    *pTmpAlp = globalAlpha32;
    }

    pTmpAlp++;
    pTmpB++;

    }
    }


    inA8 = (UInt8*)&inA64Val;
    inB8 = (UInt8*)&inB64Val;
    gain = (UInt8*)&alp64Val;
    out8 = (UInt8*)pOut;

    while(len--)
    {
    inA64Val = *pInA++;
    alp64Val = *pAlp++;
    inB64Val = *pInB++;

    out8[7] = inA8[7] + ( ((inB8[7]-inA8[7])*gain[7]) >> SWOSD_ALPHA_QSHIFT );
    out8[5] = inA8[5] + ( ((inB8[5]-inA8[5])*gain[5]) >> SWOSD_ALPHA_QSHIFT );
    out8[3] = inA8[3] + ( ((inB8[3]-inA8[3])*gain[3]) >> SWOSD_ALPHA_QSHIFT );
    out8[1] = inA8[1] + ( ((inB8[1]-inA8[1])*gain[1]) >> SWOSD_ALPHA_QSHIFT );
    out8[6] = inA8[6] + ( ((inB8[6]-inA8[6])*gain[6]) >> SWOSD_ALPHA_QSHIFT );
    out8[4] = inA8[4] + ( ((inB8[4]-inA8[4])*gain[4]) >> SWOSD_ALPHA_QSHIFT );
    out8[2] = inA8[2] + ( ((inB8[2]-inA8[2])*gain[2]) >> SWOSD_ALPHA_QSHIFT );
    out8[0] = inA8[0] + ( ((inB8[0]-inA8[0])*gain[0]) >> SWOSD_ALPHA_QSHIFT );

    out8 += 8;
    }
    }

    这个地方就是与关键色对比的地方

    这个是yuyv数据  我传进去的y0x00 u0x80 v0x80应该对比回去掉0x000x800x000x80这中yuyv数据,现在就是字体周边的没有去掉。。。。。大神  如果你的是可以的,能不能发个代码参考一下。。。。