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

绘图驱动-OSD原理1的更多相关文章

  1. 绘图驱动-OSD原理2

    转载自:http://blog.pfan.cn/programming/21209.html 现在已经可以通过修改存储单元内容来改变OSD的像素,但还有个关键的问题是如何根据需要来进行操作,即如何将某 ...

  2. 虚拟网卡TUN/TAP 驱动程序设计原理

    昨天韦哥写了<Linux下Tun/Tap设备通信原理>一文,只提到了两个使用Tun的用户进程之间的通信路径,并没有说明Tun虚拟网卡驱动是如何实现的,而正好看到了这里的一篇讲解这方面的文章 ...

  3. 老调重弹:JDBC系列 之 &lt;驱动载入原理全面解析&gt;

    前言 近期在研究Mybatis框架,因为该框架基于JDBC.想要非常好地理解和学习Mybatis,必需要对JDBC有较深入的了解.所以便把JDBC 这个东东翻出来.好好总结一番,作为自己的笔记,也是给 ...

  4. AndroidUI之绘图机制和原理 最完整的文章

    转载请标明出处:http://blog.csdn.net/sk719887916/article/details/39961171,作者:skay  导读: 熟悉javaGUI的朋友对java绘图必定 ...

  5. 虚拟网卡 TUN/TAP 驱动程序设计原理

    简介 虚拟网卡Tun/tap驱动是一个开源项目,支持很多的类UNIX平台,OpenVPN和Vtun都是基于它实现隧道包封装.本文将介绍tun/tap驱动的使用并分析虚拟网卡tun/tap驱动程序在li ...

  6. 虚拟网卡 TUN/TAP 驱动程序设计原理(经典)

    盗用-收藏 简介 虚拟网卡Tun/tap驱动是一个开源项目,支持很多的类UNIX平台,OpenVPN和Vtun都是基于它实现隧道包封装.本文将介绍tun/tap驱动的使用并分析虚拟网卡tun/tap驱 ...

  7. STM32驱动LCD原理

    TFTLCD即薄膜晶体管液晶显示器.它与无源TN-LCD.STN-LCD的简单矩阵不同,它在液晶显示屏的每一个像素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性 ...

  8. 看Spring源码不得不会的@Enable模块驱动实现原理讲解

    这篇文章我想和你聊一聊 spring的@Enable模块驱动的实现原理. 在我们平时使用spring的过程中,如果想要加个定时任务的功能,那么就需要加注解@EnableScheduling,如果想使用 ...

  9. MOSFET与MOSFET驱动电路原理及应用(转)

    源:http://www.micro-bridge.com/news/news.asp?id=258 在使用MOS管设计开关电源或者马达驱动电路的时候,大部分人都会考虑MOS的导通电阻,最大电压等,最 ...

随机推荐

  1. 数据上下文中的AddOrUpdate方法

    AddOrUpdate是扩展方法,需要添加引用  using System.Data.Entity.Migrations;

  2. JS埋点 小结

    今天在看<大型网站性能监测.分析与优化>一书,提到性能监测方式,才知道有这个名词 “JS埋点”. 大概作用:通过在web页面中,添加js脚本,实现对页面性能监测(如加载时间.服务器响应时间 ...

  3. 无法远程访问Mysql的解决方案

    现在在很多的互联网公司对于mysql数据库的使用已经是不可阻挡的趋势了,所以经常我们在项目开始的时候就会做的事情就是找一台Linux服务器,到上面去安装个mysql,然后在开始我们的数据表的导入工作, ...

  4. js获取当前日期和时间的代码

    最佳答案 var myDate = new Date(); myDate.toLocaleDateString(): //获取当前日期myDate.toLocaleTimeString(); //获取 ...

  5. 基础架构之日志管理平台搭建及java&net使用

    在现代化的软件开发流程中,日志显得非常的重要,不可能再零散的游离在各个项目中,等查看日志的时候再登录服务器去到特定的目录去查看,这显然很繁琐且效率低下,所有整合一套日志管理平台,也显得非常重要,这篇文 ...

  6. Oracle基础之Merge into

    Merge into语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句. 通过MERGE语句,根据一张表或多表联合查询的连接条件对另外一张表进行查询,连接条件匹配上的进行UPDA ...

  7. Linux->解决用userdel删除不掉用户的问题

    情况: 一般我们移除,都是先把用户从组中删除,再依次把组删掉,但是这里出现了问题: root@ per# userdel -r mysql userdel: user mysql is current ...

  8. 让NSUserDefaults使用起来像对象一样容易

    让NSUserDefaults使用起来像对象一样容易 巧妙的设计,是为了简化开发提升效率而存在. 设计要点: 1. 单例模式 2. 重写setter,getter方法 3. 专门的类来管理单例 使用时 ...

  9. RabbitMQ 启动

    1.使用Rabbit MQ 管理插件,可以更好的可视化方式查看Rabbit MQ 服务器实例的状态,你可以在命令行中使用下面的命令激活: C:\Program Files\RabbitMQ Serve ...

  10. Java SpringMVC学习--基础配置

    快速开始一个基于SpringMVC框架的web项目 开发工具 Eclipse neon.2 运行环境 tomcat8.5 1.在Eclipse中新建一个web项目:File-New-Dynamic W ...