OSD(On Screen Display)是屏幕显示技术的一种,用于在显示终端上显示字符、图形和图像。实现的过程为:存储器(一般为内存的一段)的内容与显示终端上的像素一一对应。这种一一对应的关系一般通过寄存器设置,然后由硬件上来负责实现。对存储器内容的操作便改变了屏幕的像素,从而可以实现特定界面的显示。实际上这也是一般数字显示器进行显示的方法。例如:320*240 单色(1 Bit)像素的OSD,需要40*240 Bytes的存储空间与其对应;320*240 16色(4 Bits)像素的OSD,需要160*240 Bytes的存储空间与其对应。
存储器空间为一维的,而OSD空间为二维的,并且对于小于256色(1 Byte)的OSD,还存在同一字节内每个Bit与像素的对应关系:(1)字节中的低位Bit与OSD的低像素对应(H2H或L2L);(2)字节中的高位与OSD的低像素对应(H2L或L2H)。
下图以16色(4 Bits),320*240像素 H2H(L2L) 的OSD为例分析存储器空间与OSD空间的映射关系。
图1-1 每一个格子代表一个像素
OSD中的2个像素对应1 Byte,所以一行显示内容所占的存储空间为320/2=160 Bytes,设pOSDBuffer指向OSD对应存储空间的首地址,为了将OSD上坐标(x,y)的像素设置值为PixelValue(值的范围为0x00--0x0f),即改变该像素的颜色,则需要先确定坐标(x,y)像素对应的字节存储空间地址为
pOSDDes=pOSDBuffer+y*160+x/2
由于该字节空间中存储不止一个像素的信息,所以还需要确定具体的Bits位:如果x为偶数,则该像素对应字节的低4Bits,需要保护字节的高4Bits;如果x为奇数,则对应字节的高4Bits,需要保护该字节的低4Bits。算法如下,
OldValue=*pOSDDes;
if(x%2)
*pOSDDes=OldValue&0x0f(PixelValue<<4);
else
*pOSDDes=OldValue&0xf0|PixelValue;
转载自:http://blog.pfan.cn/programming/21207.html