OSD = On Screen Display。我们在很多地方都可以见到的,比如说VCD机、电视机等。
现在我正在做视频方面的东东,想实现这一功能,在视频图像上叠加当前的时间(年月日时分秒),但是不知道其实现原理是什么?总不能是生成一个容纳以上内容的小图像,然后再将这个图像叠加到原大图上吧?我觉得不是这样子的,应该有一种合理的方法,可以我找了很多资源,也没有找到一些资料。如果可能提供YUV图像上叠加这个时间的实现方法,我将不胜感激!分数大大的有,敬请放心。注意这个时间可是动态的哟,也就是说,是应该随时间的流逝而改变的喔。

解决方案 »

  1.   

    把UCDOS的字库的字模取出来,然后。
    for (j = 0; j < FONT_ZOOM * FONT_HEIGHT && y+j < height; j++)
    for (i = 0; i < FONT_ZOOM * FONT_WIDTH && x+i < stride; i++)
    if (font[(j/FONT_ZOOM)*FONT_WIDTH + (i/FONT_ZOOM)])
    {
    int offset = (y+j)*stride + (x+i);
    int offset2 =((y+j)/2)*(stride/2) + ((x+i)/2);
    img->y[offset] = 255;
    img->u[offset2] = 127;
    img->v[offset2] = 127;
    }
      

  2.   

    to duwenyong(啸海) :    谢谢你的回答。用windows系统内置的字库(16点阵的)可以吗?我不是太明白,谢谢啦!
      

  3.   

    WINDOWS的字库我不了解,但应该是不行的,它跟UCDOS的字库不是一样,WINDOWS的字库好像是矢量的
      

  4.   

    for (i=0;i<16;i++)
    for(j=0;j<2;j++)
    for(k=0;k<8;k++)
    {
    if ((buffer[(i<<1)+j]>>(7-k))&0x1)
    {
    yoff = (ypos+i)*stride + (xpos+(j<<3)+k);
    uvoff =((ypos+i)*stride>>1) + ((xpos+j*8+k)>>1);
    pY[yoff] = 0;
    pU[uvoff] = 128;
    pV[uvoff] = 128;
    }
    }
      

  5.   

    在VCD,Monitor中,OSD是通过MCU+OSD IC+I2C Bus实现的.
    (1)其中OSD IC是内建Font,Icon的;
    (2)要与Video IC配合使用;
    对您的工作很感兴趣.希望探讨.
      

  6.   

    我不是做图像的,不过用directx,在pc上做过,dx里就有例子,看看directshow吧,如果你只是用用这个功能,而不做其他的开发。