绘图驱动-OSD原理1
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的更多相关文章
- 绘图驱动-OSD原理2
转载自:http://blog.pfan.cn/programming/21209.html 现在已经可以通过修改存储单元内容来改变OSD的像素,但还有个关键的问题是如何根据需要来进行操作,即如何将某 ...
- 虚拟网卡TUN/TAP 驱动程序设计原理
昨天韦哥写了<Linux下Tun/Tap设备通信原理>一文,只提到了两个使用Tun的用户进程之间的通信路径,并没有说明Tun虚拟网卡驱动是如何实现的,而正好看到了这里的一篇讲解这方面的文章 ...
- 老调重弹:JDBC系列 之 <驱动载入原理全面解析>
前言 近期在研究Mybatis框架,因为该框架基于JDBC.想要非常好地理解和学习Mybatis,必需要对JDBC有较深入的了解.所以便把JDBC 这个东东翻出来.好好总结一番,作为自己的笔记,也是给 ...
- AndroidUI之绘图机制和原理 最完整的文章
转载请标明出处:http://blog.csdn.net/sk719887916/article/details/39961171,作者:skay 导读: 熟悉javaGUI的朋友对java绘图必定 ...
- 虚拟网卡 TUN/TAP 驱动程序设计原理
简介 虚拟网卡Tun/tap驱动是一个开源项目,支持很多的类UNIX平台,OpenVPN和Vtun都是基于它实现隧道包封装.本文将介绍tun/tap驱动的使用并分析虚拟网卡tun/tap驱动程序在li ...
- 虚拟网卡 TUN/TAP 驱动程序设计原理(经典)
盗用-收藏 简介 虚拟网卡Tun/tap驱动是一个开源项目,支持很多的类UNIX平台,OpenVPN和Vtun都是基于它实现隧道包封装.本文将介绍tun/tap驱动的使用并分析虚拟网卡tun/tap驱 ...
- STM32驱动LCD原理
TFTLCD即薄膜晶体管液晶显示器.它与无源TN-LCD.STN-LCD的简单矩阵不同,它在液晶显示屏的每一个像素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性 ...
- 看Spring源码不得不会的@Enable模块驱动实现原理讲解
这篇文章我想和你聊一聊 spring的@Enable模块驱动的实现原理. 在我们平时使用spring的过程中,如果想要加个定时任务的功能,那么就需要加注解@EnableScheduling,如果想使用 ...
- MOSFET与MOSFET驱动电路原理及应用(转)
源:http://www.micro-bridge.com/news/news.asp?id=258 在使用MOS管设计开关电源或者马达驱动电路的时候,大部分人都会考虑MOS的导通电阻,最大电压等,最 ...
随机推荐
- Excel的Sheet页复制
最近在做一个项目,其中涉及基于模板对Excel的Sheet页进行复制.在网上尝试了很多,发现都不够完美,苦恼. 然后在查阅资料的过程中,发现有一篇提及,POI的API只对同一个Excel文件中的She ...
- Python-并发编程(线程)
之前我们说了并发编程中的进程问题,几天我们来聊聊并发编程中的线程问题. 一.背景知识 1.进程 之前我们已经了解了操作系统中进程的概念,程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能 ...
- 表单校验常用原生js库
1.字符串去除左右空格继承形式// 除去左右空格String.prototype.Trim = function() { return this.replace(/(^\s*)|(\s*$)/g, & ...
- Android 录音getMaxAmplitude()
这个方法是用来获取在前一次调用此方法之后录音中出现的最大振幅,文档解释如下: Returns the maximum absolute amplitude that was sampled since ...
- Qt 资料大全
https://blog.csdn.net/liang19890820/article/details/51752029 简述 发福利了.发福利了.发福利了,重要的事情说三遍... 为了方便更多Qte ...
- Python & Selenium & Pycharm 环境搭建
最近在研究python+selenium进行自动化测试.然后用的python开发工具是Pycharm.然后,今天就跟大家讲一下怎么搭建一整套的自动化测试环境. 安装python 首先,安装python ...
- ubuntu 启用root用户方法
1.按下ctrl + alt + T,输入 sudo passwd root设置root的密码,如下图所示: 2.使用su root来测试是否可以进入root用户,如果出现#说明已经设置root用户的 ...
- ElasticSearch之常用插件安装命令
#head监控安装,推荐 bin/plugin -install mobz/elasticsearch-head #bigdesk集群状态,推荐 bin/plugin -install lukas-v ...
- TcpListener、TcpClient
1.TcpClient using System; using System.Text; using System.Net.Sockets; namespace tcpclient { class t ...
- MEGER sentence in oracle
MEGE Sentence This oracle tutorial explains how to use the oralce MEGER sentence with syntax and sam ...