各位大神 我应该怎么去掉字体中的黑色?
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.
你好;
你这个是通过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数据,现在就是字体周边的没有去掉。。。。。大神 如果你的是可以的,能不能发个代码参考一下。。。。